2362dfee68
Keep a copy of gems needed by our releases as CI artifacts This is meant as insurance in case a gem GitLab needs is ever removed from rubygems.org. After we merge this, all future GitLab tags will have a CI artifact archive containing all the gems (for all platforms) specified in Gemfile.lock for that revision. Only runs on tags (so we don't constantly create 50MB gem cache bundles). See merge request !6617
354 lines
9 KiB
YAML
354 lines
9 KiB
YAML
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'
|
|
|
|
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 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
|
|
trigger_docs:
|
|
stage: post-test
|
|
script:
|
|
- "curl -X POST -F token=${DOCS_TRIGGER_TOKEN} -F ref=master 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 <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
|