#######################
# rspec job base specs
.rails-job-base:
  extends:
    - .default-retry
    - .default-before_script
    - .rails-cache

.minimal-bundle-install:
  script:
    - export BUNDLE_WITHOUT="${BUNDLE_WITHOUT}:default:test:puma:kerberos:metrics:omnibus:ed25519"
    - bundle_install_script

.base-script:
  script:
    # Only install knapsack after bundle install! Otherwise oddly some native
    # gems could not be found under some circumstance. No idea why, hours wasted.
    - run_timed_command "gem install knapsack --no-document"
    - run_timed_command "scripts/gitaly-test-spawn"
    - source ./scripts/rspec_helpers.sh

.minimal-rspec-tests:
  variables:
    RSPEC_TESTS_MAPPING_ENABLED: "true"

.rspec-base:
  extends: .rails-job-base
  stage: test
  variables:
    RUBY_GC_MALLOC_LIMIT: 67108864
    RUBY_GC_MALLOC_LIMIT_MAX: 134217728
    RECORD_DEPRECATIONS: "true"
  needs: ["setup-test-env", "retrieve-tests-metadata", "compile-test-assets", "detect-tests"]
  script:
    - !reference [.base-script, script]
    - rspec_paralellized_job "--tag ~quarantine --tag ~geo --tag ~level:migration"
  artifacts:
    expire_in: 31d
    when: always
    paths:
      - coverage/
      - crystalball/
      - deprecations/
      - knapsack/
      - rspec_flaky/
      - rspec_profiling/
      - tmp/capybara/
      - tmp/memory_test/
      - log/*.log
    reports:
      junit: junit_rspec.xml

.rspec-base-migration:
  extends: .rails:rules:ee-and-foss-migration
  script:
    - !reference [.base-script, script]
    - rspec_paralellized_job "--tag ~quarantine --tag ~geo --tag level:migration"

.rspec-base-pg11:
  extends:
    - .rspec-base
    - .use-pg11

.rspec-base-pg12:
  extends:
    - .rspec-base
    - .use-pg12

.rspec-base-pg12-as-if-foss:
  extends:
    - .rspec-base
    - .as-if-foss
    - .use-pg12
  needs: ["setup-test-env", "retrieve-tests-metadata", "compile-test-assets as-if-foss", "detect-tests"]

.rspec-base-pg13:
  extends:
    - .rspec-base
    - .use-pg13

.rspec-ee-base-pg11:
  extends:
    - .rspec-base
    - .use-pg11-ee

.rspec-ee-base-pg12:
  extends:
    - .rspec-base
    - .use-pg12-ee

.rspec-ee-base-pg13:
  extends:
    - .rspec-base
    - .use-pg13-ee

.rspec-ee-base-geo:
  extends: .rspec-base
  script:
    - !reference [.base-script, script]
    - rspec_paralellized_job "--tag ~quarantine --tag geo"

.rspec-ee-base-geo-pg11:
  extends:
    - .rspec-ee-base-geo
    - .use-pg11-ee

.rspec-ee-base-geo-pg12:
  extends:
    - .rspec-ee-base-geo
    - .use-pg12-ee

.rspec-ee-base-geo-pg13:
  extends:
    - .rspec-ee-base-geo
    - .use-pg13-ee

.db-job-base:
  extends:
    - .rails-job-base
    - .rails:rules:ee-and-foss-migration
    - .use-pg12
  stage: test
  needs: ["setup-test-env"]
# rspec job base specs
######################

############################
# rspec job parallel configs
.rspec-migration-parallel:
  parallel: 9

.rspec-ee-migration-parallel:
  parallel: 3

.rspec-unit-parallel:
  parallel: 20

.rspec-ee-unit-parallel:
  parallel: 12

.rspec-ee-unit-geo-parallel:
  parallel: 2

.rspec-integration-parallel:
  parallel: 8

.rspec-ee-integration-parallel:
  parallel: 4

.rspec-system-parallel:
  parallel: 24

.rspec-ee-system-parallel:
  parallel: 6
# rspec job parallel configs
############################

#######################################################
# EE/FOSS: default refs (MRs, default branch, schedules) jobs #
setup-test-env:
  extends:
    - .rails-job-base
    - .setup-test-env-cache
    - .rails:rules:code-backstage-qa
  stage: prepare
  variables:
    GITLAB_TEST_EAGER_LOAD: "0"
    SETUP_DB: "false"
  script:
    - run_timed_command "scripts/setup-test-env"
    - echo -e "\e[0Ksection_start:`date +%s`:gitaly-test-build[collapsed=true]\r\e[0KCompiling Gitaly binaries"
    - run_timed_command "scripts/gitaly-test-build"  # Do not use 'bundle exec' here
    - echo -e "\e[0Ksection_end:`date +%s`:gitaly-test-build\r\e[0K"

  artifacts:
    expire_in: 7d
    paths:
      - config/secrets.yml
      - tmp/tests/gitaly/_build/bin/
      - tmp/tests/gitaly/config.toml
      - tmp/tests/gitaly/gitaly2.config.toml
      - tmp/tests/gitaly/internal/
      - tmp/tests/gitaly/internal_gitaly2/
      - tmp/tests/gitaly/internal_sockets/
      - tmp/tests/gitaly/Makefile
      - tmp/tests/gitaly/praefect.config.toml
      - tmp/tests/gitaly/ruby/
      - tmp/tests/gitlab-elasticsearch-indexer/bin/gitlab-elasticsearch-indexer
      - tmp/tests/gitlab-shell/
      - tmp/tests/gitlab-test-fork/
      - tmp/tests/gitlab-test-fork_bare/
      - tmp/tests/gitlab-test/
      - tmp/tests/gitlab-workhorse/gitlab-zip-metadata
      - tmp/tests/gitlab-workhorse/gitlab-zip-cat
      - tmp/tests/gitlab-workhorse/gitlab-workhorse
      - tmp/tests/gitlab-workhorse/gitlab-resize-image
      - tmp/tests/gitlab-workhorse/config.toml
      - tmp/tests/gitlab-workhorse/WORKHORSE_TREE
      - tmp/tests/repositories/
      - tmp/tests/second_storage/
    when: always

update-setup-test-env-cache:
  extends:
    - setup-test-env
    - .setup-test-env-cache-push
    - .shared:rules:update-cache
  artifacts:
    paths: []  # This job's purpose is only to update the cache.

update-gitaly-binaries-cache:
  extends:
    - setup-test-env
    - .gitaly-binaries-cache-push
    - .shared:rules:update-gitaly-binaries-cache
  artifacts:
    paths: []  # This job's purpose is only to update the cache.

.coverage-base:
  extends:
    - .default-retry
    - .default-before_script
    - .coverage-cache
  variables:
    SETUP_DB: "false"
    USE_BUNDLE_INSTALL: "false"

.static-analysis-base:
  extends:
    - .default-retry
    - .default-before_script
    - .static-analysis-cache
  needs: []
  variables:
    SETUP_DB: "false"
    ENABLE_SPRING: "1"
    # Disable warnings in browserslist which can break on backports
    # https://github.com/browserslist/browserslist/blob/a287ec6/node.js#L367-L384
    BROWSERSLIST_IGNORE_OLD_DATA: "true"

update-static-analysis-cache:
  extends:
    - .static-analysis-base
    - .static-analysis-cache-push
    - .shared:rules:update-cache
  stage: prepare
  script:
    - run_timed_command "bundle exec rubocop --parallel"  # For the moment we only cache `tmp/rubocop_cache` so we don't need to run all the tasks.

static-analysis:
  extends:
    - .static-analysis-base
    - .static-analysis:rules:ee-and-foss
  stage: test
  parallel: 4
  script:
    - run_timed_command "retry yarn install --frozen-lockfile"
    - scripts/static-analysis
  artifacts:
    expire_in: 31d
    when: always
    paths:
      - tmp/feature_flags/

static-analysis as-if-foss:
  extends:
    - static-analysis
    - .static-analysis:rules:as-if-foss
    - .as-if-foss

zeitwerk-check:
  extends:
    - .rails-cache
    - .default-before_script
    - .rails:rules:ee-and-foss-unit
  variables:
    BUNDLE_WITHOUT: ""
    SETUP_DB: "false"
  needs: []
  stage: test
  script:
    - sed -i -e "s/config\.autoloader = :classic/config\.autoloader = :zeitwerk/" config/application.rb
    - RAILS_ENV=test bundle exec rake zeitwerk:check
    - RAILS_ENV=development bundle exec rake zeitwerk:check
    - RAILS_ENV=production bundle exec rake zeitwerk:check

rspec migration pg12:
  extends:
    - .rspec-base-pg12
    - .rspec-base-migration
    - .rspec-migration-parallel

rspec migration pg12 minimal:
  extends:
    - rspec migration pg12
    - .minimal-rspec-tests
    - .rails:rules:ee-and-foss-migration:minimal

rspec unit pg12:
  extends:
    - .rspec-base-pg12
    - .rails:rules:ee-and-foss-unit
    - .rspec-unit-parallel

rspec unit pg12 minimal:
  extends:
    - rspec unit pg12
    - .minimal-rspec-tests
    - .rails:rules:ee-and-foss-unit:minimal

rspec integration pg12:
  extends:
    - .rspec-base-pg12
    - .rails:rules:ee-and-foss-integration
    - .rspec-integration-parallel

rspec integration pg12 minimal:
  extends:
    - rspec integration pg12
    - .minimal-rspec-tests
    - .rails:rules:ee-and-foss-integration:minimal

rspec system pg12:
  extends:
    - .rspec-base-pg12
    - .rails:rules:ee-and-foss-system
    - .rspec-system-parallel

rspec system pg12 minimal:
  extends:
    - rspec system pg12
    - .minimal-rspec-tests
    - .rails:rules:ee-and-foss-system:minimal

# Dedicated job to test DB library code against PG11.
# Note that these are already tested against PG12 in the `rspec unit pg12` / `rspec-ee unit pg12` jobs.
rspec db-library-code pg11:
  extends:
    - .rspec-base-pg11
    - .rails:rules:ee-and-foss-db-library-code
  script:
    - !reference [.base-script, script]
    - rspec_db_library_code

rspec fast_spec_helper:
  extends:
    - .rspec-base-pg12
    - .rails:rules:ee-and-foss-fast_spec_helper
  script:
    - bin/rspec spec/fast_spec_helper.rb

rspec fast_spec_helper minimal:
  extends:
    - rspec fast_spec_helper
    - .minimal-rspec-tests
    - .rails:rules:ee-and-foss-fast_spec_helper:minimal

db:migrate:reset:
  extends: .db-job-base
  script:
    - bundle exec rake db:migrate:reset

db:check-schema:
  extends:
    - .db-job-base
    - .rails:rules:ee-mr-and-default-branch-only
  script:
    - source scripts/schema_changed.sh
    - scripts/validate_migration_timestamps

db:check-migrations:
  extends:
    - .db-job-base
    - .rails:rules:ee-and-foss-mr-with-migration
  script:
    - scripts/validate_migration_schema
  allow_failure: true

db:migrate-from-previous-major-version:
  extends: .db-job-base
  variables:
    USE_BUNDLE_INSTALL: "false"
    SETUP_DB: "false"
    PROJECT_TO_CHECKOUT: "gitlab-foss"
    TAG_TO_CHECKOUT: "v12.10.14"
  script:
    - '[[ -d "ee/" ]] || export PROJECT_TO_CHECKOUT="gitlab"'
    - '[[ -d "ee/" ]] || export TAG_TO_CHECKOUT="${TAG_TO_CHECKOUT}-ee"'
    - retry 'git fetch https://gitlab.com/gitlab-org/$PROJECT_TO_CHECKOUT.git $TAG_TO_CHECKOUT'
    - git checkout -f FETCH_HEAD
    # Patch Gemfile of the previous major version for compatibility.
    - sed -i -e "s/gem 'grpc', '~> 1.24.0'/gem 'grpc', '~> 1.30.2'/" Gemfile  # Update gRPC for Ruby 2.7
    - sed -i -e "s/gem 'google-protobuf', '~> 3.8.0'/gem 'google-protobuf', '~> 3.12'/" Gemfile
    - sed -i -e "s/gem 'nokogiri', '~> 1.10.5'/gem 'nokogiri', '~> 1.11.0'/" Gemfile
    - sed -i -e "s/gem 'mimemagic', '~> 0.3.2'/gem 'ruby-magic', '~> 0.4.0'/" Gemfile
    - run_timed_command "bundle update --bundler google-protobuf nokogiri grpc mimemagic bootsnap"
    - SETUP_DB=false USE_BUNDLE_INSTALL=true bash scripts/prepare_build.sh
    - run_timed_command "bundle exec rake db:drop db:create db:structure:load db:migrate db:seed_fu"
    - git checkout -f $CI_COMMIT_SHA
    - SETUP_DB=false USE_BUNDLE_INSTALL=true bash scripts/prepare_build.sh
    - run_timed_command "bundle exec rake db:migrate"

db:rollback:
  extends: .db-job-base
  script:
    - bundle exec rake db:migrate VERSION=20181228175414
    - bundle exec rake db:migrate SKIP_SCHEMA_VERSION_CHECK=true

db:gitlabcom-database-testing:
  extends: .rails:rules:db:gitlabcom-database-testing
  stage: test
  image: ruby:2.7-alpine
  needs: []
  allow_failure: true
  script:
    - source scripts/utils.sh
    - install_gitlab_gem
    - ./scripts/trigger-build gitlab-com-database-testing

gitlab:setup:
  extends: .db-job-base
  variables:
    SETUP_DB: "false"
  script:
    # Manually clone gitlab-test and only seed this project in
    # db/fixtures/development/04_project.rb thanks to SIZE=1 below
    - git clone https://gitlab.com/gitlab-org/gitlab-test.git
       /home/git/repositories/gitlab-org/gitlab-test.git
    - !reference [.base-script, script]
    - force=yes SIZE=1 FIXTURE_PATH="db/fixtures/development" bundle exec rake gitlab:setup
  artifacts:
    when: on_failure
    expire_in: 1d
    paths:
      - log/*.log

db:backup_and_restore:
  extends: .db-job-base
  variables:
    SETUP_DB: "false"
    GITLAB_ASSUME_YES: "1"
  script:
    - . scripts/prepare_build.sh
    - bundle exec rake db:drop db:create db:structure:load db:seed_fu
    - mkdir -p tmp/tests/public/uploads tmp/tests/{artifacts,pages,lfs-objects,registry}
    - bundle exec rake gitlab:backup:create
    - date
    - bundle exec rake gitlab:backup:restore
  rules:
    - changes:
        - "lib/backup/**/*"
        - "lib/tasks/gitlab/backup.rake"

rspec:deprecations:
  extends:
    - .default-retry
    - .default-before_script
    - .static-analysis-cache
    - .rails:rules:deprecations
  stage: post-test
  allow_failure: true
  # We cannot use needs since it would mean needing 84 jobs (since most are parallelized)
  # so we use `dependencies` here.
  dependencies:
    - rspec migration pg12
    - rspec unit pg12
    - rspec integration pg12
    - rspec system pg12
    - rspec-ee migration pg12
    - rspec-ee unit pg12
    - rspec-ee integration pg12
    - rspec-ee system pg12
    - rspec-ee unit pg12 geo
    - rspec-ee integration pg12 geo
    - rspec-ee system pg12 geo
  variables:
    SETUP_DB: "false"
  script:
    - grep -h -R "keyword" deprecations/ | awk '{$1=$1};1' | sort | uniq -c | sort
    - grep -R "keyword" deprecations/ | wc
    - run_timed_command "bundle exec rubocop --only Lint/LastKeywordArgument --parallel"
  artifacts:
    expire_in: 31d
    when: always
    paths:
      - deprecations/

rspec:coverage:
  extends:
    - .coverage-base
    - .rails:rules:rspec-coverage
  stage: post-test
  # We cannot use needs since it would mean needing 84 jobs (since most are parallelized)
  # so we use `dependencies` here.
  dependencies:
    - setup-test-env
    - rspec migration pg12
    - rspec unit pg12
    - rspec integration pg12
    - rspec system pg12
    - rspec-ee migration pg12
    - rspec-ee unit pg12
    - rspec-ee integration pg12
    - rspec-ee system pg12
    - rspec-ee unit pg12 geo
    - rspec-ee integration pg12 geo
    - rspec-ee system pg12 geo
    - memory-static
    - memory-on-boot
  script:
    - !reference [.minimal-bundle-install, script]
    - run_timed_command "bundle exec scripts/merge-simplecov"
    - run_timed_command "bundle exec scripts/gather-test-memory-data"
  coverage: '/LOC \((\d+\.\d+%)\) covered.$/'
  artifacts:
    name: coverage
    expire_in: 31d
    paths:
      - coverage/index.html
      - coverage/assets/
      - tmp/memory_test/
    reports:
      cobertura: coverage/coverage.xml

rspec:feature-flags:
  extends:
    - .coverage-base
    - .rails:rules:rspec-feature-flags
  stage: post-test
  needs: ["static-analysis"]
  script:
    - !reference [.minimal-bundle-install, script]
    - if [ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]; then
        run_timed_command "bundle exec scripts/used-feature-flags" || (scripts/slack master-broken "☠️ \`${CI_JOB_NAME}\` failed! ☠️ See ${CI_JOB_URL}" ci_failing "GitLab Bot" && exit 1);
      else
        run_timed_command "bundle exec scripts/used-feature-flags";
      fi

# EE/FOSS: default refs (MRs, default branch, schedules) jobs #
#######################################################

##################################################
# EE: default refs (MRs, default branch, schedules) jobs #
rspec migration pg12-as-if-foss:
  extends:
    - .rspec-base-pg12-as-if-foss
    - .rspec-base-migration
    - .rails:rules:as-if-foss-migration
    - .rspec-migration-parallel

rspec migration pg12-as-if-foss minimal:
  extends:
    - rspec migration pg12-as-if-foss
    - .minimal-rspec-tests
    - .rails:rules:as-if-foss-migration:minimal

rspec unit pg12-as-if-foss:
  extends:
    - .rspec-base-pg12-as-if-foss
    - .rails:rules:as-if-foss-unit
    - .rspec-unit-parallel

rspec unit pg12-as-if-foss minimal:
  extends:
    - rspec unit pg12-as-if-foss
    - .minimal-rspec-tests
    - .rails:rules:as-if-foss-unit:minimal

rspec integration pg12-as-if-foss:
  extends:
    - .rspec-base-pg12-as-if-foss
    - .rails:rules:as-if-foss-integration
    - .rspec-integration-parallel

rspec integration pg12-as-if-foss minimal:
  extends:
    - rspec integration pg12-as-if-foss
    - .minimal-rspec-tests
    - .rails:rules:as-if-foss-integration:minimal

rspec system pg12-as-if-foss:
  extends:
    - .rspec-base-pg12-as-if-foss
    - .rails:rules:as-if-foss-system
    - .rspec-system-parallel

rspec system pg12-as-if-foss minimal:
  extends:
    - rspec system pg12-as-if-foss
    - .minimal-rspec-tests
    - .rails:rules:as-if-foss-system:minimal

rspec-ee migration pg12:
  extends:
    - .rspec-ee-base-pg12
    - .rspec-base-migration
    - .rails:rules:ee-only-migration
    - .rspec-ee-migration-parallel

rspec-ee migration pg12 minimal:
  extends:
    - rspec-ee migration pg12
    - .minimal-rspec-tests
    - .rails:rules:ee-only-migration:minimal

rspec-ee unit pg12:
  extends:
    - .rspec-ee-base-pg12
    - .rails:rules:ee-only-unit
    - .rspec-ee-unit-parallel

rspec-ee unit pg12 minimal:
  extends:
    - rspec-ee unit pg12
    - .minimal-rspec-tests
    - .rails:rules:ee-only-unit:minimal

rspec-ee integration pg12:
  extends:
    - .rspec-ee-base-pg12
    - .rails:rules:ee-only-integration
    - .rspec-ee-integration-parallel

rspec-ee integration pg12 minimal:
  extends:
    - rspec-ee integration pg12
    - .minimal-rspec-tests
    - .rails:rules:ee-only-integration:minimal

rspec-ee system pg12:
  extends:
    - .rspec-ee-base-pg12
    - .rails:rules:ee-only-system
    - .rspec-ee-system-parallel

rspec-ee system pg12 minimal:
  extends:
    - rspec-ee system pg12
    - .minimal-rspec-tests
    - .rails:rules:ee-only-system:minimal

rspec-ee unit pg12 geo:
  extends:
    - .rspec-ee-base-geo-pg12
    - .rails:rules:ee-only-unit
    - .rspec-ee-unit-geo-parallel

rspec-ee unit pg12 geo minimal:
  extends:
    - rspec-ee unit pg12 geo
    - .minimal-rspec-tests
    - .rails:rules:ee-only-unit:minimal

rspec-ee integration pg12 geo:
  extends:
    - .rspec-ee-base-geo-pg12
    - .rails:rules:ee-only-integration

rspec-ee integration pg12 geo minimal:
  extends:
    - rspec-ee integration pg12 geo
    - .minimal-rspec-tests
    - .rails:rules:ee-only-integration:minimal

rspec-ee system pg12 geo:
  extends:
    - .rspec-ee-base-geo-pg12
    - .rails:rules:ee-only-system

rspec-ee system pg12 geo minimal:
  extends:
    - rspec-ee system pg12 geo
    - .minimal-rspec-tests
    - .rails:rules:ee-only-system:minimal

db:rollback geo:
  extends:
    - db:rollback
    - .rails:rules:ee-only-migration
  script:
    - bundle exec rake geo:db:migrate VERSION=20170627195211
    - bundle exec rake geo:db:migrate
# EE: default refs (MRs, default branch, schedules) jobs #
##################################################

##########################################
# EE/FOSS: default branch nightly scheduled jobs #

# PG11
rspec migration pg11:
  extends:
    - .rspec-base-pg11
    - .rspec-base-migration
    - .rails:rules:default-branch-schedule-nightly--code-backstage
    - .rspec-migration-parallel

rspec unit pg11:
  extends:
    - .rspec-base-pg11
    - .rails:rules:default-branch-schedule-nightly--code-backstage
    - .rspec-unit-parallel

rspec integration pg11:
  extends:
    - .rspec-base-pg11
    - .rails:rules:default-branch-schedule-nightly--code-backstage
    - .rspec-integration-parallel

rspec system pg11:
  extends:
    - .rspec-base-pg11
    - .rails:rules:default-branch-schedule-nightly--code-backstage
    - .rspec-system-parallel

# PG13
rspec migration pg13:
  extends:
    - .rspec-base-pg13
    - .rspec-base-migration
    - .rails:rules:default-branch-schedule-nightly--code-backstage
    - .rspec-migration-parallel

rspec unit pg13:
  extends:
    - .rspec-base-pg13
    - .rails:rules:default-branch-schedule-nightly--code-backstage
    - .rspec-unit-parallel

rspec integration pg13:
  extends:
    - .rspec-base-pg13
    - .rails:rules:default-branch-schedule-nightly--code-backstage
    - .rspec-integration-parallel

rspec system pg13:
  extends:
    - .rspec-base-pg13
    - .rails:rules:default-branch-schedule-nightly--code-backstage
    - .rspec-system-parallel

# EE/FOSS: default branch nightly scheduled jobs #
##########################################

#####################################
# EE: default branch nightly scheduled jobs #

# PG11
rspec-ee migration pg11:
  extends:
    - .rspec-ee-base-pg11
    - .rspec-base-migration
    - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
    - .rspec-ee-migration-parallel

rspec-ee unit pg11:
  extends:
    - .rspec-ee-base-pg11
    - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
    - .rspec-ee-unit-parallel

rspec-ee integration pg11:
  extends:
    - .rspec-ee-base-pg11
    - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
    - .rspec-ee-integration-parallel

rspec-ee system pg11:
  extends:
    - .rspec-ee-base-pg11
    - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
    - .rspec-ee-system-parallel

rspec-ee unit pg11 geo:
  extends:
    - .rspec-ee-base-geo-pg11
    - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
    - .rspec-ee-unit-geo-parallel

rspec-ee integration pg11 geo:
  extends:
    - .rspec-ee-base-geo-pg11
    - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only

rspec-ee system pg11 geo:
  extends:
    - .rspec-ee-base-geo-pg11
    - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only

# PG13
rspec-ee migration pg13:
  extends:
    - .rspec-ee-base-pg13
    - .rspec-base-migration
    - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
    - .rspec-ee-migration-parallel

rspec-ee unit pg13:
  extends:
    - .rspec-ee-base-pg13
    - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
    - .rspec-ee-unit-parallel

rspec-ee integration pg13:
  extends:
    - .rspec-ee-base-pg13
    - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
    - .rspec-ee-integration-parallel

rspec-ee system pg13:
  extends:
    - .rspec-ee-base-pg13
    - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
    - .rspec-ee-system-parallel

rspec-ee unit pg13 geo:
  extends:
    - .rspec-ee-base-geo-pg13
    - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
    - .rspec-ee-unit-geo-parallel

rspec-ee integration pg13 geo:
  extends:
    - .rspec-ee-base-geo-pg13
    - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only

rspec-ee system pg13 geo:
  extends:
    - .rspec-ee-base-geo-pg13
    - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
# EE: default branch nightly scheduled jobs #
#####################################

##################################################
# EE: Canonical MR pipelines
rspec fail-fast:
  extends:
    - .rspec-ee-base-pg12  # This job also runs EE spec which needs elasticsearch
    - .rails:rules:rspec fail-fast
  stage: test
  needs: ["setup-test-env", "retrieve-tests-metadata", "compile-test-assets", "detect-tests"]
  script:
    - !reference [.base-script, script]
    - rspec_fail_fast tmp/matching_tests.txt "--tag ~quarantine"
  artifacts:
    expire_in: 7d
    paths:
      - tmp/capybara/

rspec foss-impact:
  extends:
    - .rspec-base-pg12-as-if-foss
    - .rails:rules:rspec-foss-impact
  needs: ["setup-test-env", "retrieve-tests-metadata", "compile-test-assets as-if-foss", "detect-tests as-if-foss"]
  script:
    - !reference [.base-script, script]
    - rspec_matched_foss_tests tmp/matching_foss_tests.txt "--tag ~quarantine"
  artifacts:
    expire_in: 7d
    paths:
      - tmp/capybara/

fail-pipeline-early:
  extends:
    - .rails:rules:fail-pipeline-early
  stage: post-test
  needs:
    - job: rspec fail-fast
      artifacts: false
  variables:
    GIT_DEPTH: 1
  before_script:
    - source scripts/utils.sh
    - install_gitlab_gem
  script:
    - fail_pipeline_early
# EE: Canonical MR pipelines
##################################################
