gitlabhq/gitlabhq

View on GitHub
.gitlab/ci/rails.gitlab-ci.yml

Summary

Maintainability
Test Coverage
.rails-job-base:
  extends:
    - .default-retry
    - .default-before_script
    - .rails-cache

#######################################################
# EE/FOSS: default refs (MRs, master, schedules) jobs #
setup-test-env:
  extends:
    - .rails-job-base
    - .rails:rules:default-refs-code-backstage-qa
    - .use-pg11
  stage: prepare
  variables:
    GITLAB_TEST_EAGER_LOAD: "0"
  script:
    - run_timed_command "bundle exec ruby -I. -e 'require \"config/environment\"; TestEnv.init'"
    - run_timed_command "scripts/gitaly-test-build"  # Do not use 'bundle exec' here
    - rm tmp/tests/gitaly/.ruby-bundle  # This file prevents gems from being installed even if vendor/gitaly-ruby is missing
  artifacts:
    expire_in: 7d
    paths:
      - config/secrets.yml
      - tmp/tests/gitaly
      - tmp/tests/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
      - tmp/tests/repositories
      - tmp/tests/second_storage
    when: always

update-rails-cache:
  extends:
    - setup-test-env
    - .shared:rules:update-cache
  artifacts: {}  # This job's purpose is only to update the cache.
  cache:
    policy: push  # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up.

.static-analysis-base:
  extends:
    - .default-retry
    - .default-before_script
    - .static-analysis-cache
  needs: []
  variables:
    SETUP_DB: "false"
    ENABLE_SPRING: "1"

update-static-analysis-cache:
  extends:
    - .static-analysis-base
    - .shared:rules:update-cache
  stage: prepare
  script:
    - rm -rf ./node_modules  # We remove node_modules because there's no mechanism to remove stall entries.
    - run_timed_command "retry yarn install --frozen-lockfile"
    - bundle exec rubocop --parallel  # For the moment we only cache `vendor/ruby/`, `node_modules/`, and `tmp/rubocop_cache` so we don't need to run all the tasks,
  cache:
    # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up but RuboCop has a mechanism
    # for keeping only the N latest cache files, so we take advantage of it with `pull-push` and removing `node_modules` at the start of the job.
    policy: pull-push

static-analysis:
  extends:
    - .static-analysis-base
    - .rails:rules:default-refs-code-backstage-qa
  stage: test
  parallel: 4
  script:
    - run_timed_command "retry yarn install --frozen-lockfile"
    - scripts/static-analysis

downtime_check:
  extends:
    - .rails-job-base
    - .rails:rules:downtime_check
  needs: []
  stage: test
  variables:
    SETUP_DB: "false"
  script:
    - bundle exec rake downtime_check

.rspec-base:
  extends: .rails-job-base
  stage: test
  needs: ["setup-test-env", "retrieve-tests-metadata", "compile-test-assets"]
  script:
    - run_timed_command "scripts/gitaly-test-build"
    - run_timed_command "scripts/gitaly-test-spawn"
    - source scripts/rspec_helpers.sh
    - rspec_paralellized_job "--tag ~quarantine --tag ~geo --tag ~level:migration"
  artifacts:
    expire_in: 31d
    when: always
    paths:
      - coverage/
      - knapsack/
      - rspec_flaky/
      - rspec_profiling/
      - tmp/capybara/
      - tmp/memory_test/
      - log/*.log
    reports:
      junit: junit_rspec.xml

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

.rspec-base-migration:
  extends: .rails:rules:ee-and-foss-migration
  script:
    - run_timed_command "scripts/gitaly-test-build"
    - run_timed_command "scripts/gitaly-test-spawn"
    - source scripts/rspec_helpers.sh
    - rspec_paralellized_job "--tag ~quarantine --tag ~geo --tag level:migration"

rspec migration pg11:
  extends:
    - .rspec-base-pg11
    - .rspec-base-migration
  parallel: 5

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

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

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

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

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

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-master-only
  script:
    - source scripts/schema_changed.sh

db:migrate-from-v12.10.0:
  extends: .db-job-base
  variables:
    SETUP_DB: "false"
  script:
    - export PROJECT_TO_CHECKOUT="gitlab"
    - export TAG_TO_CHECKOUT="v12.10.0-ee"
    - '[[ -d "ee/" ]] || export PROJECT_TO_CHECKOUT="gitlab-foss"'
    - '[[ -d "ee/" ]] || export TAG_TO_CHECKOUT="v12.10.0"'
    - git fetch https://gitlab.com/gitlab-org/$PROJECT_TO_CHECKOUT.git $TAG_TO_CHECKOUT
    - git checkout -f FETCH_HEAD
    - bundle update google-protobuf grpc bootsnap
    - bundle install $BUNDLE_INSTALL_FLAGS
    - date
    - cp config/gitlab.yml.example config/gitlab.yml
    - bundle exec rake db:drop db:create db:structure:load db:seed_fu
    - date
    - git checkout -f $CI_COMMIT_SHA
    - bundle install $BUNDLE_INSTALL_FLAGS
    - date
    - . scripts/prepare_build.sh
    - date
    - 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

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
    - run_timed_command "scripts/gitaly-test-build"
    - run_timed_command "scripts/gitaly-test-spawn"
    - force=yes SIZE=1 FIXTURE_PATH="db/fixtures/development" bundle exec rake gitlab:setup
  artifacts:
    when: on_failure
    expire_in: 1d
    paths:
      - log/*.log

rspec:coverage:
  extends:
    - .rails-job-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 pg11
    - rspec unit pg11
    - rspec integration pg11
    - rspec system pg11
    - rspec-ee migration pg11
    - rspec-ee unit pg11
    - rspec-ee integration pg11
    - rspec-ee system pg11
    - rspec-ee unit pg11 geo
    - rspec-ee integration pg11 geo
    - rspec-ee system pg11 geo
    - memory-static
    - memory-on-boot
  variables:
    SETUP_DB: "false"
  script:
    - bundle exec scripts/merge-simplecov
    - 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
# EE/FOSS: default refs (MRs, master, schedules) jobs #
#######################################################

##################################################
# EE: default refs (MRs, master, schedules) jobs #
.rspec-base-pg11-as-if-foss:
  extends:
    - .rspec-base
    - .as-if-foss
    - .use-pg11
  needs: ["setup-test-env", "retrieve-tests-metadata", "compile-test-assets as-if-foss"]

rspec migration pg11-as-if-foss:
  extends:
    - .rspec-base-pg11-as-if-foss
    - .rspec-base-migration
    - .rails:rules:as-if-foss-migration
  parallel: 5

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

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

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

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

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

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

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

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

.rspec-ee-base-geo:
  extends: .rspec-base
  script:
    - run_timed_command "scripts/gitaly-test-build"
    - run_timed_command "scripts/gitaly-test-spawn"
    - source scripts/rspec_helpers.sh
    - scripts/prepare_postgres_fdw.sh
    - rspec_paralellized_job "--tag ~quarantine --tag geo"

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

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

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

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

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, master, schedules) jobs #
##################################################

##################################################
# EE: Canonical MR pipelines
rspec foss-impact:
  extends:
    - .rspec-base
    - .as-if-foss
    - .rails:rules:ee-mr-only
    - .use-pg11
  script:
    - install_gitlab_gem
    - run_timed_command "scripts/gitaly-test-build"
    - run_timed_command "scripts/gitaly-test-spawn"
    - source scripts/rspec_helpers.sh
    - tooling/bin/find_foss_tests tmp/matching_foss_tests.txt
    - rspec_matched_tests tmp/matching_foss_tests.txt "--tag ~quarantine"
  artifacts:
    expire_in: 7d
    paths:
      - tmp/matching_foss_tests.txt
      - tmp/capybara/
# EE: Merge Request pipelines
##################################################