image: "ruby:2.1" cache: key: "ruby21" paths: - vendor/apt - vendor/ruby variables: MYSQL_ALLOW_EMPTY_PASSWORD: "1" # retry tests only in CI environment RSPEC_RETRY_RETRY_COUNT: "3" RAILS_ENV: "test" SIMPLECOV: "true" USE_DB: "true" USE_BUNDLE_INSTALL: "true" GIT_DEPTH: "20" 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 - '[ "$USE_DB" != "true" ] || bundle exec rake db:drop db:create db:schema:load db:migrate' stages: - prepare - test - post-test - pages # Prepare and merge knapsack tests .knapsack-state: &knapsack-state services: [] variables: USE_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 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.3 .ruby-23: &ruby-23 image: "ruby:2.3" <<: *use-db only: - master cache: key: "ruby-23" paths: - vendor/apt - vendor/ruby .rspec-knapsack-ruby23: &rspec-knapsack-ruby23 <<: *rspec-knapsack <<: *ruby-23 .spinach-knapsack-ruby23: &spinach-knapsack-ruby23 <<: *spinach-knapsack <<: *ruby-23 rspec 0 20 ruby23: *rspec-knapsack-ruby23 rspec 1 20 ruby23: *rspec-knapsack-ruby23 rspec 2 20 ruby23: *rspec-knapsack-ruby23 rspec 3 20 ruby23: *rspec-knapsack-ruby23 rspec 4 20 ruby23: *rspec-knapsack-ruby23 rspec 5 20 ruby23: *rspec-knapsack-ruby23 rspec 6 20 ruby23: *rspec-knapsack-ruby23 rspec 7 20 ruby23: *rspec-knapsack-ruby23 rspec 8 20 ruby23: *rspec-knapsack-ruby23 rspec 9 20 ruby23: *rspec-knapsack-ruby23 rspec 10 20 ruby23: *rspec-knapsack-ruby23 rspec 11 20 ruby23: *rspec-knapsack-ruby23 rspec 12 20 ruby23: *rspec-knapsack-ruby23 rspec 13 20 ruby23: *rspec-knapsack-ruby23 rspec 14 20 ruby23: *rspec-knapsack-ruby23 rspec 15 20 ruby23: *rspec-knapsack-ruby23 rspec 16 20 ruby23: *rspec-knapsack-ruby23 rspec 17 20 ruby23: *rspec-knapsack-ruby23 rspec 18 20 ruby23: *rspec-knapsack-ruby23 rspec 19 20 ruby23: *rspec-knapsack-ruby23 spinach 0 10 ruby23: *spinach-knapsack-ruby23 spinach 1 10 ruby23: *spinach-knapsack-ruby23 spinach 2 10 ruby23: *spinach-knapsack-ruby23 spinach 3 10 ruby23: *spinach-knapsack-ruby23 spinach 4 10 ruby23: *spinach-knapsack-ruby23 spinach 5 10 ruby23: *spinach-knapsack-ruby23 spinach 6 10 ruby23: *spinach-knapsack-ruby23 spinach 7 10 ruby23: *spinach-knapsack-ruby23 spinach 8 10 ruby23: *spinach-knapsack-ruby23 spinach 9 10 ruby23: *spinach-knapsack-ruby23 # Other generic tests .ruby-static-analysis: &ruby-static-analysis variables: SIMPLECOV: "false" USE_DB: "false" USE_BUNDLE_INSTALL: "true" .exec: &exec <<: *ruby-static-analysis stage: test script: - bundle exec $CI_BUILD_NAME rubocop: *exec rake scss_lint: *exec rake brakeman: *exec rake flog: *exec rake flay: *exec license_finder: *exec rake downtime_check: *exec rake db:migrate:reset: stage: test <<: *use-db script: - rake db:migrate:reset 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/ bundler:audit: stage: test <<: *ruby-static-analysis only: - master script: - "bundle exec bundle-audit check --update --ignore OSVDB-115941" coverage: stage: post-test services: [] variables: USE_DB: "false" USE_BUNDLE_INSTALL: "true" script: - bundle exec scripts/merge-simplecov artifacts: name: coverage expire_in: 31d paths: - coverage/index.html - coverage/assets/ # Notify slack in the end notify:slack: stage: post-test variables: USE_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