image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.3-git-2.7-phantomjs-2.1" cache: key: "ruby-231" paths: - vendor/ruby variables: MYSQL_ALLOW_EMPTY_PASSWORD: "1" # retry tests only in CI environment RSPEC_RETRY_RETRY_COUNT: "3" RAILS_ENV: "test" SIMPLECOV: "true" SETUP_DB: "true" USE_BUNDLE_INSTALL: "true" GIT_DEPTH: "20" PHANTOMJS_VERSION: "2.1.1" before_script: - source ./scripts/prepare_build.sh - cp config/gitlab.yml.example config/gitlab.yml - bundle --version - '[ "$USE_BUNDLE_INSTALL" != "true" ] || retry bundle install --without postgres production --jobs $(nproc) "${FLAGS[@]}"' - retry gem install knapsack - '[ "$SETUP_DB" != "true" ] || bundle exec rake db:drop db:create db:schema:load db:migrate add_limits_mysql' stages: - prepare - test - post-test - pages # Prepare and merge knapsack tests .knapsack-state: &knapsack-state services: [] variables: SETUP_DB: "false" USE_BUNDLE_INSTALL: "false" cache: key: "knapsack" paths: - knapsack/ artifacts: expire_in: 31d paths: - knapsack/ knapsack: <<: *knapsack-state stage: prepare script: - mkdir -p knapsack/ - '[[ -f knapsack/rspec_report.json ]] || echo "{}" > knapsack/rspec_report.json' - '[[ -f knapsack/spinach_report.json ]] || echo "{}" > knapsack/spinach_report.json' update-knapsack: <<: *knapsack-state stage: post-test script: - scripts/merge-reports knapsack/rspec_report.json knapsack/rspec_node_*.json - scripts/merge-reports knapsack/spinach_report.json knapsack/spinach_node_*.json - rm -f knapsack/*_node_*.json only: - master # Execute all testing suites .use-db: &use-db services: - mysql:latest - redis:alpine .rspec-knapsack: &rspec-knapsack stage: test <<: *use-db script: - bundle exec rake assets:precompile 2>/dev/null - JOB_NAME=( $CI_BUILD_NAME ) - export CI_NODE_INDEX=${JOB_NAME[1]} - export CI_NODE_TOTAL=${JOB_NAME[2]} - export KNAPSACK_REPORT_PATH=knapsack/rspec_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json - export KNAPSACK_GENERATE_REPORT=true - cp knapsack/rspec_report.json ${KNAPSACK_REPORT_PATH} - knapsack rspec "--color --format documentation" artifacts: expire_in: 31d paths: - knapsack/ - coverage/ .spinach-knapsack: &spinach-knapsack stage: test <<: *use-db script: - bundle exec rake assets:precompile 2>/dev/null - JOB_NAME=( $CI_BUILD_NAME ) - export CI_NODE_INDEX=${JOB_NAME[1]} - export CI_NODE_TOTAL=${JOB_NAME[2]} - export KNAPSACK_REPORT_PATH=knapsack/spinach_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json - export KNAPSACK_GENERATE_REPORT=true - cp knapsack/spinach_report.json ${KNAPSACK_REPORT_PATH} - knapsack spinach "-r rerun" || retry '[[ -e tmp/spinach-rerun.txt ]] && bundle exec spinach -r rerun $(cat tmp/spinach-rerun.txt)' artifacts: expire_in: 31d paths: - knapsack/ - coverage/ rspec 0 20: *rspec-knapsack rspec 1 20: *rspec-knapsack rspec 2 20: *rspec-knapsack rspec 3 20: *rspec-knapsack rspec 4 20: *rspec-knapsack rspec 5 20: *rspec-knapsack rspec 6 20: *rspec-knapsack rspec 7 20: *rspec-knapsack rspec 8 20: *rspec-knapsack rspec 9 20: *rspec-knapsack rspec 10 20: *rspec-knapsack rspec 11 20: *rspec-knapsack rspec 12 20: *rspec-knapsack rspec 13 20: *rspec-knapsack rspec 14 20: *rspec-knapsack rspec 15 20: *rspec-knapsack rspec 16 20: *rspec-knapsack rspec 17 20: *rspec-knapsack rspec 18 20: *rspec-knapsack rspec 19 20: *rspec-knapsack spinach 0 10: *spinach-knapsack spinach 1 10: *spinach-knapsack spinach 2 10: *spinach-knapsack spinach 3 10: *spinach-knapsack spinach 4 10: *spinach-knapsack spinach 5 10: *spinach-knapsack spinach 6 10: *spinach-knapsack spinach 7 10: *spinach-knapsack spinach 8 10: *spinach-knapsack spinach 9 10: *spinach-knapsack # Execute all testing suites against Ruby 2.1 .ruby-21: &ruby-21 image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.1-git-2.7-phantomjs-2.1" <<: *use-db only: - master cache: key: "ruby21" paths: - vendor/ruby .rspec-knapsack-ruby21: &rspec-knapsack-ruby21 <<: *rspec-knapsack <<: *ruby-21 .spinach-knapsack-ruby21: &spinach-knapsack-ruby21 <<: *spinach-knapsack <<: *ruby-21 rspec 0 20 ruby21: *rspec-knapsack-ruby21 rspec 1 20 ruby21: *rspec-knapsack-ruby21 rspec 2 20 ruby21: *rspec-knapsack-ruby21 rspec 3 20 ruby21: *rspec-knapsack-ruby21 rspec 4 20 ruby21: *rspec-knapsack-ruby21 rspec 5 20 ruby21: *rspec-knapsack-ruby21 rspec 6 20 ruby21: *rspec-knapsack-ruby21 rspec 7 20 ruby21: *rspec-knapsack-ruby21 rspec 8 20 ruby21: *rspec-knapsack-ruby21 rspec 9 20 ruby21: *rspec-knapsack-ruby21 rspec 10 20 ruby21: *rspec-knapsack-ruby21 rspec 11 20 ruby21: *rspec-knapsack-ruby21 rspec 12 20 ruby21: *rspec-knapsack-ruby21 rspec 13 20 ruby21: *rspec-knapsack-ruby21 rspec 14 20 ruby21: *rspec-knapsack-ruby21 rspec 15 20 ruby21: *rspec-knapsack-ruby21 rspec 16 20 ruby21: *rspec-knapsack-ruby21 rspec 17 20 ruby21: *rspec-knapsack-ruby21 rspec 18 20 ruby21: *rspec-knapsack-ruby21 rspec 19 20 ruby21: *rspec-knapsack-ruby21 spinach 0 10 ruby21: *spinach-knapsack-ruby21 spinach 1 10 ruby21: *spinach-knapsack-ruby21 spinach 2 10 ruby21: *spinach-knapsack-ruby21 spinach 3 10 ruby21: *spinach-knapsack-ruby21 spinach 4 10 ruby21: *spinach-knapsack-ruby21 spinach 5 10 ruby21: *spinach-knapsack-ruby21 spinach 6 10 ruby21: *spinach-knapsack-ruby21 spinach 7 10 ruby21: *spinach-knapsack-ruby21 spinach 8 10 ruby21: *spinach-knapsack-ruby21 spinach 9 10 ruby21: *spinach-knapsack-ruby21 # Other generic tests .ruby-static-analysis: &ruby-static-analysis variables: SIMPLECOV: "false" SETUP_DB: "false" USE_BUNDLE_INSTALL: "true" .exec: &exec <<: *ruby-static-analysis stage: test script: - bundle exec $CI_BUILD_NAME rubocop: *exec rake haml_lint: *exec rake scss_lint: *exec rake brakeman: *exec rake flay: *exec license_finder: *exec rake downtime_check: *exec rake ce_to_ee_merge_check: <<: *exec only: - branches except: - tags allow_failure: yes rake db:migrate:reset: stage: test <<: *use-db script: - rake db:migrate:reset rake db:seed_fu: stage: test <<: *use-db variables: SIZE: "1" SETUP_DB: "false" RAILS_ENV: "development" script: - git clone https://gitlab.com/gitlab-org/gitlab-test.git /home/git/repositories/gitlab-org/gitlab-test.git - bundle exec rake db:setup db:seed_fu artifacts: when: on_failure expire_in: 1d paths: - log/development.log teaspoon: stage: test <<: *use-db script: - curl --silent --location https://deb.nodesource.com/setup_6.x | bash - - apt-get install --assume-yes nodejs - npm install --global istanbul - teaspoon artifacts: name: coverage-javascript expire_in: 31d paths: - coverage-javascript/default/ lint-doc: stage: test image: "phusion/baseimage:latest" before_script: [] script: - scripts/lint-doc.sh bundler:check: stage: test <<: *ruby-static-analysis script: - bundle check bundler:audit: stage: test <<: *ruby-static-analysis only: - master script: - "bundle exec bundle-audit check --update --ignore OSVDB-115941" migration paths: stage: test <<: *use-db only: - master@gitlab-org/gitlab-ce script: - git checkout HEAD . - git fetch --tags - git checkout v8.5.9 - 'echo test: unix:/var/opt/gitlab/redis/redis.socket > config/resque.yml' - bundle install --without postgres production --jobs $(nproc) "${FLAGS[@]}" --retry=3 - rake db:drop db:create db:schema:load db:seed_fu - git checkout $CI_BUILD_REF - rake db:migrate coverage: stage: post-test services: [] variables: SETUP_DB: "false" USE_BUNDLE_INSTALL: "true" script: - bundle exec scripts/merge-simplecov artifacts: name: coverage expire_in: 31d paths: - coverage/index.html - coverage/assets/ # Trigger docs build # https://gitlab.com/gitlab-com/doc-gitlab-com/blob/master/README.md#deployment-process trigger_docs: variables: GIT_STRATEGY: none stage: post-test before_script: [] cache: {} artifacts: {} script: - "curl -X POST -F token=${DOCS_TRIGGER_TOKEN} -F ref=master -F variables[PROJECT]=ce https://gitlab.com/api/v3/projects/38069/trigger/builds" only: - master # Notify slack in the end notify:slack: stage: post-test variables: SETUP_DB: "false" USE_BUNDLE_INSTALL: "false" script: - ./scripts/notify_slack.sh "#builds" "Build on \`$CI_BUILD_REF_NAME\` failed! Commit \`$(git log -1 --oneline)\` See " when: on_failure only: - master@gitlab-org/gitlab-ce - tags@gitlab-org/gitlab-ce - master@gitlab-org/gitlab-ee - tags@gitlab-org/gitlab-ee pages: before_script: [] stage: pages dependencies: - coverage - teaspoon script: - mv public/ .public/ - mkdir public/ - mv coverage public/coverage-ruby - mv coverage-javascript/default/ public/coverage-javascript/ artifacts: paths: - public only: - master # Insurance in case a gem needed by one of our releases gets yanked from # rubygems.org in the future. cache gems: only: - tags variables: SETUP_DB: "false" script: - bundle package --all --all-platforms artifacts: paths: - vendor/cache