00dd2ba95e
Enabling caching of classes slows start-up time because all controllers are loaded at initialization, but it reduces memory and load because files are not reloaded with every request. For example, caching is not necessary for loading database migrations but useful for handling Knapsack specs. Addresses gitlab-org/gitlab-ee#2162
477 lines
12 KiB
YAML
477 lines
12 KiB
YAML
image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.3.3-golang-1.8-git-2.7-phantomjs-2.1-node-7.1"
|
|
|
|
cache:
|
|
key: "ruby-233"
|
|
paths:
|
|
- vendor/ruby
|
|
|
|
variables:
|
|
MYSQL_ALLOW_EMPTY_PASSWORD: "1"
|
|
RAILS_ENV: "test"
|
|
NODE_ENV: "test"
|
|
SIMPLECOV: "true"
|
|
SETUP_DB: "true"
|
|
USE_BUNDLE_INSTALL: "true"
|
|
GIT_DEPTH: "20"
|
|
PHANTOMJS_VERSION: "2.1.1"
|
|
GET_SOURCES_ATTEMPTS: "3"
|
|
KNAPSACK_RSPEC_SUITE_REPORT_PATH: knapsack/${CI_PROJECT_NAME}/rspec_report-master.json
|
|
KNAPSACK_SPINACH_SUITE_REPORT_PATH: knapsack/${CI_PROJECT_NAME}/spinach_report-master.json
|
|
|
|
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) --clean $FLAGS'
|
|
- retry gem install knapsack fog-aws mime-types
|
|
- '[ "$SETUP_DB" != "true" ] || bundle exec rake db:drop db:create db:schema:load db:migrate add_limits_mysql'
|
|
|
|
stages:
|
|
- prepare
|
|
- test
|
|
- post-test
|
|
- pages
|
|
|
|
# Predefined scopes
|
|
.dedicated-runner: &dedicated-runner
|
|
tags:
|
|
- gitlab-org
|
|
|
|
.knapsack-state: &knapsack-state
|
|
services: []
|
|
variables:
|
|
SETUP_DB: "false"
|
|
USE_BUNDLE_INSTALL: "false"
|
|
KNAPSACK_S3_BUCKET: "gitlab-ce-cache"
|
|
cache:
|
|
key: "knapsack"
|
|
paths:
|
|
- knapsack/
|
|
artifacts:
|
|
expire_in: 31d
|
|
paths:
|
|
- knapsack/
|
|
|
|
.use-db: &use-db
|
|
services:
|
|
- mysql:latest
|
|
- redis:alpine
|
|
|
|
.rspec-knapsack: &rspec-knapsack
|
|
stage: test
|
|
<<: *dedicated-runner
|
|
<<: *use-db
|
|
script:
|
|
- JOB_NAME=( $CI_JOB_NAME )
|
|
- export CI_NODE_INDEX=${JOB_NAME[1]}
|
|
- export CI_NODE_TOTAL=${JOB_NAME[2]}
|
|
- export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${JOB_NAME[0]}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
|
|
- export KNAPSACK_GENERATE_REPORT=true
|
|
- export CACHE_CLASSES=true
|
|
- cp ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} ${KNAPSACK_REPORT_PATH}
|
|
- knapsack rspec "--color --format documentation"
|
|
artifacts:
|
|
expire_in: 31d
|
|
when: always
|
|
paths:
|
|
- coverage/
|
|
- knapsack/
|
|
- tmp/capybara/
|
|
|
|
.spinach-knapsack: &spinach-knapsack
|
|
stage: test
|
|
<<: *dedicated-runner
|
|
<<: *use-db
|
|
script:
|
|
- JOB_NAME=( $CI_JOB_NAME )
|
|
- export CI_NODE_INDEX=${JOB_NAME[1]}
|
|
- export CI_NODE_TOTAL=${JOB_NAME[2]}
|
|
- export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${JOB_NAME[0]}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
|
|
- export KNAPSACK_GENERATE_REPORT=true
|
|
- export CACHE_CLASSES=true
|
|
- cp ${KNAPSACK_SPINACH_SUITE_REPORT_PATH} ${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
|
|
when: always
|
|
paths:
|
|
- coverage/
|
|
- knapsack/
|
|
- tmp/capybara/
|
|
|
|
# Prepare and merge knapsack tests
|
|
knapsack:
|
|
<<: *knapsack-state
|
|
<<: *dedicated-runner
|
|
stage: prepare
|
|
script:
|
|
- mkdir -p knapsack/${CI_PROJECT_NAME}/
|
|
- wget -O $KNAPSACK_RSPEC_SUITE_REPORT_PATH http://${KNAPSACK_S3_BUCKET}.s3.amazonaws.com/$KNAPSACK_RSPEC_SUITE_REPORT_PATH || rm $KNAPSACK_RSPEC_SUITE_REPORT_PATH
|
|
- wget -O $KNAPSACK_SPINACH_SUITE_REPORT_PATH http://${KNAPSACK_S3_BUCKET}.s3.amazonaws.com/$KNAPSACK_SPINACH_SUITE_REPORT_PATH || rm $KNAPSACK_SPINACH_SUITE_REPORT_PATH
|
|
- '[[ -f $KNAPSACK_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${KNAPSACK_RSPEC_SUITE_REPORT_PATH}'
|
|
- '[[ -f $KNAPSACK_SPINACH_SUITE_REPORT_PATH ]] || echo "{}" > ${KNAPSACK_SPINACH_SUITE_REPORT_PATH}'
|
|
|
|
update-knapsack:
|
|
<<: *knapsack-state
|
|
<<: *dedicated-runner
|
|
stage: post-test
|
|
script:
|
|
- scripts/merge-reports ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/rspec_node_*.json
|
|
- scripts/merge-reports ${KNAPSACK_SPINACH_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/spinach_node_*.json
|
|
- '[[ -z ${KNAPSACK_S3_BUCKET} ]] || scripts/sync-reports put $KNAPSACK_S3_BUCKET $KNAPSACK_RSPEC_SUITE_REPORT_PATH $KNAPSACK_SPINACH_SUITE_REPORT_PATH'
|
|
- rm -f knapsack/${CI_PROJECT_NAME}/*_node_*.json
|
|
only:
|
|
- master@gitlab-org/gitlab-ce
|
|
- master@gitlab-org/gitlab-ee
|
|
- master@gitlab/gitlabhq
|
|
- master@gitlab/gitlab-ee
|
|
|
|
setup-test-env:
|
|
<<: *use-db
|
|
<<: *dedicated-runner
|
|
stage: prepare
|
|
script:
|
|
- node --version
|
|
- yarn install --pure-lockfile
|
|
- bundle exec rake gitlab:assets:compile
|
|
- bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init'
|
|
artifacts:
|
|
expire_in: 7d
|
|
paths:
|
|
- node_modules
|
|
- public/assets
|
|
- tmp/tests
|
|
|
|
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
|
|
|
|
# Other generic tests
|
|
.ruby-static-analysis: &ruby-static-analysis
|
|
variables:
|
|
SIMPLECOV: "false"
|
|
SETUP_DB: "false"
|
|
USE_BUNDLE_INSTALL: "true"
|
|
|
|
.exec: &exec
|
|
<<: *ruby-static-analysis
|
|
<<: *dedicated-runner
|
|
stage: test
|
|
script:
|
|
- bundle exec $CI_JOB_NAME
|
|
|
|
rubocop:
|
|
<<: *ruby-static-analysis
|
|
<<: *dedicated-runner
|
|
stage: test
|
|
script:
|
|
- bundle exec "rubocop --require rubocop-rspec"
|
|
|
|
rake haml_lint: *exec
|
|
rake scss_lint: *exec
|
|
rake config_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
|
|
except:
|
|
- master
|
|
- tags
|
|
- /^[\d-]+-stable(-ee)?$/
|
|
allow_failure: yes
|
|
cache:
|
|
key: "ee_compat_check_repo"
|
|
paths:
|
|
- ee_compat_check/ee-repo/
|
|
artifacts:
|
|
name: "${CI_JOB_NAME}_${CI_COMIT_REF_NAME}_${CI_COMMIT_SHA}"
|
|
when: on_failure
|
|
expire_in: 10d
|
|
paths:
|
|
- ee_compat_check/patches/*.patch
|
|
|
|
rake db:migrate:reset:
|
|
stage: test
|
|
<<: *use-db
|
|
<<: *dedicated-runner
|
|
script:
|
|
- bundle exec rake db:migrate:reset
|
|
|
|
rake db:rollback:
|
|
stage: test
|
|
<<: *use-db
|
|
<<: *dedicated-runner
|
|
script:
|
|
- bundle exec rake db:rollback STEP=120
|
|
- bundle exec rake db:migrate
|
|
|
|
rake db:seed_fu:
|
|
stage: test
|
|
<<: *use-db
|
|
<<: *dedicated-runner
|
|
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
|
|
|
|
rake gitlab:assets:compile:
|
|
stage: test
|
|
<<: *dedicated-runner
|
|
dependencies: []
|
|
variables:
|
|
NODE_ENV: "production"
|
|
RAILS_ENV: "production"
|
|
SETUP_DB: "false"
|
|
USE_DB: "false"
|
|
SKIP_STORAGE_VALIDATION: "true"
|
|
WEBPACK_REPORT: "true"
|
|
script:
|
|
- bundle exec rake yarn:install gitlab:assets:compile
|
|
artifacts:
|
|
name: webpack-report
|
|
expire_in: 31d
|
|
paths:
|
|
- webpack-report/
|
|
|
|
rake karma:
|
|
cache:
|
|
paths:
|
|
- vendor/ruby
|
|
- node_modules
|
|
stage: test
|
|
<<: *use-db
|
|
<<: *dedicated-runner
|
|
variables:
|
|
BABEL_ENV: "coverage"
|
|
script:
|
|
- bundle exec rake karma
|
|
coverage: '/^Statements *: (\d+\.\d+%)/'
|
|
artifacts:
|
|
name: coverage-javascript
|
|
expire_in: 31d
|
|
paths:
|
|
- coverage-javascript/
|
|
|
|
docs:check:apilint:
|
|
image: "phusion/baseimage"
|
|
stage: test
|
|
<<: *dedicated-runner
|
|
cache: {}
|
|
dependencies: []
|
|
before_script: []
|
|
script:
|
|
- scripts/lint-doc.sh
|
|
|
|
docs:check:links:
|
|
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:nanoc-bootstrap-ruby-2.4-alpine"
|
|
stage: test
|
|
<<: *dedicated-runner
|
|
cache: {}
|
|
dependencies: []
|
|
before_script: []
|
|
script:
|
|
- mv doc/ /nanoc/content/
|
|
- cd /nanoc
|
|
# Build HTML from Markdown
|
|
- bundle exec nanoc
|
|
# Check the internal links
|
|
- bundle exec nanoc check internal_links
|
|
|
|
bundler:check:
|
|
stage: test
|
|
<<: *dedicated-runner
|
|
<<: *ruby-static-analysis
|
|
script:
|
|
- bundle check
|
|
|
|
bundler:audit:
|
|
stage: test
|
|
<<: *ruby-static-analysis
|
|
<<: *dedicated-runner
|
|
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 CVE-2016-4658"
|
|
|
|
migration paths:
|
|
stage: test
|
|
<<: *use-db
|
|
<<: *dedicated-runner
|
|
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.14.10
|
|
- git checkout -f FETCH_HEAD
|
|
- bundle install --without postgres production --jobs $(nproc) $FLAGS --retry=3
|
|
- bundle exec rake db:drop db:create db:schema:load db:seed_fu
|
|
- git checkout $CI_COMMIT_SHA
|
|
- bundle install --without postgres production --jobs $(nproc) $FLAGS --retry=3
|
|
- source scripts/prepare_build.sh
|
|
- bundle exec rake db:migrate
|
|
|
|
coverage:
|
|
stage: post-test
|
|
services: []
|
|
<<: *dedicated-runner
|
|
variables:
|
|
SETUP_DB: "false"
|
|
USE_BUNDLE_INSTALL: "true"
|
|
script:
|
|
- bundle exec scripts/merge-simplecov
|
|
coverage: '/LOC \((\d+\.\d+%)\) covered.$/'
|
|
artifacts:
|
|
name: coverage
|
|
expire_in: 31d
|
|
paths:
|
|
- coverage/index.html
|
|
- coverage/assets/
|
|
|
|
lint:javascript:
|
|
<<: *dedicated-runner
|
|
cache:
|
|
paths:
|
|
- node_modules/
|
|
stage: test
|
|
before_script: []
|
|
script:
|
|
- yarn run eslint
|
|
|
|
lint:javascript:report:
|
|
<<: *dedicated-runner
|
|
cache:
|
|
paths:
|
|
- node_modules/
|
|
stage: post-test
|
|
before_script: []
|
|
script:
|
|
- find app/ spec/ -name '*.js' -exec sed --in-place 's|/\* eslint-disable .*\*/||' {} \; # run report over all files
|
|
- yarn run eslint-report || true # ignore exit code
|
|
artifacts:
|
|
name: eslint-report
|
|
expire_in: 31d
|
|
paths:
|
|
- eslint-report.html
|
|
|
|
# Trigger docs build
|
|
# https://gitlab.com/gitlab-com/doc-gitlab-com/blob/master/README.md#deployment-process
|
|
trigger_docs:
|
|
stage: post-test
|
|
image: "alpine"
|
|
<<: *dedicated-runner
|
|
before_script:
|
|
- apk update && apk add curl
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
cache: {}
|
|
artifacts: {}
|
|
script:
|
|
- "HTTP_STATUS=$(curl -X POST -F token=${DOCS_TRIGGER_TOKEN} -F ref=master -F variables[PROJECT]=${CI_PROJECT_NAME} --silent --output curl.log --write-out '%{http_code}' https://gitlab.com/api/v3/projects/1794617/trigger/builds)"
|
|
- if [ "${HTTP_STATUS}" -ne "201" ]; then echo "Error ${HTTP_STATUS}"; cat curl.log; echo; exit 1; fi
|
|
only:
|
|
- master@gitlab-org/gitlab-ce
|
|
- master@gitlab-org/gitlab-ee
|
|
|
|
# Notify slack in the end
|
|
notify:slack:
|
|
stage: post-test
|
|
<<: *dedicated-runner
|
|
variables:
|
|
SETUP_DB: "false"
|
|
USE_BUNDLE_INSTALL: "false"
|
|
script:
|
|
- ./scripts/notify_slack.sh "#development" "Build on \`$CI_COMMIT_REF_NAME\` failed! Commit \`$(git log -1 --oneline)\` See <https://gitlab.com/gitlab-org/$(basename "$PWD")/commit/"$CI_COMMIT_SHA"/pipelines>"
|
|
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
|
|
<<: *dedicated-runner
|
|
dependencies:
|
|
- coverage
|
|
- rake karma
|
|
- rake gitlab:assets:compile
|
|
- lint:javascript:report
|
|
script:
|
|
- mv public/ .public/
|
|
- mkdir public/
|
|
- mv coverage/ public/coverage-ruby/ || true
|
|
- mv coverage-javascript/ public/coverage-javascript/ || true
|
|
- mv eslint-report.html public/ || true
|
|
- mv webpack-report/ public/webpack-report/ || true
|
|
artifacts:
|
|
paths:
|
|
- public
|
|
only:
|
|
- master@gitlab-org/gitlab-ce
|
|
- master@gitlab-org/gitlab-ee
|
|
|
|
# Insurance in case a gem needed by one of our releases gets yanked from
|
|
# rubygems.org in the future.
|
|
cache gems:
|
|
<<: *dedicated-runner
|
|
only:
|
|
- tags
|
|
variables:
|
|
SETUP_DB: "false"
|
|
script:
|
|
- bundle package --all --all-platforms
|
|
artifacts:
|
|
paths:
|
|
- vendor/cache
|
|
only:
|
|
- master@gitlab-org/gitlab-ce
|
|
- master@gitlab-org/gitlab-ee
|