diff options
Diffstat (limited to '.gitlab-ci.yml')
-rw-r--r-- | .gitlab-ci.yml | 363 |
1 files changed, 363 insertions, 0 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 84db51f1546..bb94fc41ad1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -30,16 +30,294 @@ stages: - 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@gitlab-org/gitlab-ce + - master@gitlab-org/gitlab-ee + - master@gitlab/gitlabhq + - master@gitlab/gitlab-ee + .use-db: &use-db services: - mysql:latest - redis:alpine +setup-test-env: + <<: *use-db + stage: prepare + script: + - bundle exec rake assets:precompile 2>/dev/null + - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init' + artifacts: + expire_in: 7d + paths: + - public/assets + - tmp/tests + + +.rspec-knapsack: &rspec-knapsack + stage: test + <<: *use-db + script: + - 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: + - 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@gitlab-org/gitlab-ce + - master@gitlab-org/gitlab-ee + - master@gitlab/gitlabhq + - master@gitlab/gitlab-ee + 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 ee_compat_check: + <<: *exec + only: + - branches@gitlab-org/gitlab-ce + - branches@gitlab/gitlabhq + except: + - master + - tags + - /^[\d-]+-stable(-ee)?$/ + allow_failure: yes + cache: + key: "ruby231-ee_compat_check_repo" + paths: + - ee_compat_check/repo/ + - vendor/ruby + artifacts: + name: "${CI_BUILD_NAME}_${CI_BUILD_REF_NAME}_${CI_BUILD_REF}" + when: on_failure + expire_in: 10d + paths: + - ee_compat_check/patches/*.patch + +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 + - rake 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@gitlab-org/gitlab-ce + - master@gitlab-org/gitlab-ee + - master@gitlab/gitlabhq + - master@gitlab/gitlab-ee + script: + - "bundle exec bundle-audit check --update --ignore OSVDB-115941" + migration paths: stage: test <<: *use-db variables: SETUP_DB: "false" + only: + - master@gitlab-org/gitlab-ce + - master@gitlab-org/gitlab-ee + - master@gitlab/gitlabhq + - master@gitlab/gitlab-ee script: - git fetch origin v8.5.9 - git checkout -f FETCH_HEAD @@ -50,3 +328,88 @@ migration paths: - git checkout $CI_BUILD_REF - source scripts/prepare_build.sh - 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/ + +lint-javascript: + stage: test + image: "node:latest" + before_script: + - npm install + script: + - npm run eslint + +# Trigger docs build +# https://gitlab.com/gitlab-com/doc-gitlab-com/blob/master/README.md#deployment-process +trigger_docs: + stage: post-test + image: "alpine" + before_script: + - apk update && apk add curl + variables: + GIT_STRATEGY: none + cache: {} + artifacts: {} + script: + - "curl -X POST -F token=${DOCS_TRIGGER_TOKEN} -F ref=master -F variables[PROJECT]=ce https://gitlab.com/api/v3/projects/1794617/trigger/builds" + only: + - master@gitlab-org/gitlab-ce + +# 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 <https://gitlab.com/gitlab-org/$(basename "$PWD")/commit/"$CI_BUILD_REF"/builds>" + 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 |