GitLab steht Mittwoch, den 23. September, zwischen 10:00 und 12:00 Uhr aufgrund von Wartungsarbeiten nicht zur Verfügung.

.gitlab-ci.yml 10.5 KB
Newer Older
1
image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.3-git-2.7-phantomjs-2.1"
2

3
cache:
Z.J. van de Weg's avatar
Z.J. van de Weg committed
4
  key: "ruby-231"
5
  paths:
6
  - vendor/ruby
7

8 9
variables:
  MYSQL_ALLOW_EMPTY_PASSWORD: "1"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
10 11
  # retry tests only in CI environment
  RSPEC_RETRY_RETRY_COUNT: "3"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
12 13
  RAILS_ENV: "test"
  SIMPLECOV: "true"
14
  SETUP_DB: "true"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
15
  USE_BUNDLE_INSTALL: "true"
16
  GIT_DEPTH: "20"
17
  PHANTOMJS_VERSION: "2.1.1"
18

Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
19
before_script:
20
  - source ./scripts/prepare_build.sh
Valery Sizov's avatar
Valery Sizov committed
21
  - cp config/gitlab.yml.example config/gitlab.yml
Kamil Trzcinski's avatar
Test  
Kamil Trzcinski committed
22
  - bundle --version
Kamil Trzcinski's avatar
Kamil Trzcinski committed
23
  - '[ "$USE_BUNDLE_INSTALL" != "true" ] || retry bundle install --without postgres production --jobs $(nproc) "${FLAGS[@]}"'
Kamil Trzcinski's avatar
Kamil Trzcinski committed
24
  - retry gem install knapsack
Alfredo Sumaran's avatar
Alfredo Sumaran committed
25
  - '[ "$SETUP_DB" != "true" ] || bundle exec rake db:drop db:create db:schema:load db:migrate add_limits_mysql'
26

Kamil Trzcinski's avatar
Kamil Trzcinski committed
27
stages:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
28
- prepare
Kamil Trzcinski's avatar
Kamil Trzcinski committed
29
- test
30
- post-test
31
- pages
32

33
# Prepare and merge knapsack tests
Kamil Trzcinski's avatar
Kamil Trzcinski committed
34
.knapsack-state: &knapsack-state
35
  services: []
Kamil Trzcinski's avatar
Kamil Trzcinski committed
36
  variables:
37
    SETUP_DB: "false"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
38 39 40 41 42 43
    USE_BUNDLE_INSTALL: "false"
  cache:
    key: "knapsack"
    paths:
    - knapsack/
  artifacts:
44
    expire_in: 31d
Kamil Trzcinski's avatar
Kamil Trzcinski committed
45
    paths:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
46
    - knapsack/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
47

Kamil Trzcinski's avatar
Kamil Trzcinski committed
48
knapsack:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
49
  <<: *knapsack-state
Kamil Trzcinski's avatar
Kamil Trzcinski committed
50 51 52 53 54 55 56
  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:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
57
  <<: *knapsack-state
58 59 60 61 62
  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
63
  only:
64 65
    - master@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
66 67
    - master@gitlab/gitlabhq
    - master@gitlab/gitlab-ee
68

69
.use-db: &use-db
70 71 72
  services:
    - mysql:latest
    - redis:alpine
73

74 75 76 77 78 79 80 81 82 83 84 85 86
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


Kamil Trzcinski's avatar
Kamil Trzcinski committed
87
.rspec-knapsack: &rspec-knapsack
88
  stage: test
89
  <<: *use-db
90
  script:
91 92 93
    - JOB_NAME=( $CI_BUILD_NAME )
    - export CI_NODE_INDEX=${JOB_NAME[1]}
    - export CI_NODE_TOTAL=${JOB_NAME[2]}
Kamil Trzcinski's avatar
Kamil Trzcinski committed
94
    - export KNAPSACK_REPORT_PATH=knapsack/rspec_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
95
    - export KNAPSACK_GENERATE_REPORT=true
Kamil Trzcinski's avatar
Kamil Trzcinski committed
96
    - cp knapsack/rspec_report.json ${KNAPSACK_REPORT_PATH}
Stan Hu's avatar
Stan Hu committed
97
    - knapsack rspec "--color --format documentation"
98
  artifacts:
99
    expire_in: 31d
100 101
    paths:
    - knapsack/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
102
    - coverage/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
103

Kamil Trzcinski's avatar
Kamil Trzcinski committed
104
.spinach-knapsack: &spinach-knapsack
Kamil Trzcinski's avatar
Kamil Trzcinski committed
105
  stage: test
106
  <<: *use-db
Kamil Trzcinski's avatar
Kamil Trzcinski committed
107 108 109 110 111 112 113
  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}
Kamil Trzcinski's avatar
Kamil Trzcinski committed
114
    - knapsack spinach "-r rerun" || retry '[[ -e tmp/spinach-rerun.txt ]] && bundle exec spinach -r rerun $(cat tmp/spinach-rerun.txt)'
Kamil Trzcinski's avatar
Kamil Trzcinski committed
115
  artifacts:
116
    expire_in: 31d
Kamil Trzcinski's avatar
Kamil Trzcinski committed
117 118
    paths:
    - knapsack/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
119
    - coverage/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151

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
Kamil Trzcinski's avatar
Kamil Trzcinski committed
152

153 154
# Execute all testing suites against Ruby 2.1
.ruby-21: &ruby-21
155
  image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.1-git-2.7-phantomjs-2.1"
156
  <<: *use-db
Connor Shea's avatar
Connor Shea committed
157
  only:
158 159
    - master@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
160 161
    - master@gitlab/gitlabhq
    - master@gitlab/gitlab-ee
162
  cache:
163
    key: "ruby21"
164 165
    paths:
      - vendor/ruby
166

167
.rspec-knapsack-ruby21: &rspec-knapsack-ruby21
Kamil Trzcinski's avatar
Kamil Trzcinski committed
168
  <<: *rspec-knapsack
169
  <<: *ruby-21
Kamil Trzcinski's avatar
Kamil Trzcinski committed
170

171
.spinach-knapsack-ruby21: &spinach-knapsack-ruby21
Kamil Trzcinski's avatar
Kamil Trzcinski committed
172
  <<: *spinach-knapsack
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
  <<: *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
206 207

# Other generic tests
208

209
.ruby-static-analysis: &ruby-static-analysis
210 211
  variables:
    SIMPLECOV: "false"
212
    SETUP_DB: "false"
213
    USE_BUNDLE_INSTALL: "true"
214

215
.exec: &exec
216
  <<: *ruby-static-analysis
217 218
  stage: test
  script:
219
    - bundle exec $CI_BUILD_NAME
220

221
rubocop: *exec
Rémy Coutable's avatar
Rémy Coutable committed
222
rake haml_lint: *exec
223 224
rake scss_lint: *exec
rake brakeman: *exec
Connor Shea's avatar
Connor Shea committed
225
rake flay: *exec
Kamil Trzcinski's avatar
Kamil Trzcinski committed
226
license_finder: *exec
227
rake downtime_check: *exec
228
rake ee_compat_check:
229 230
  <<: *exec
  only:
231 232
    - branches@gitlab-org/gitlab-ce
    - branches@gitlab/gitlabhq
233
  except:
234
    - master
235
    - tags
236
    - /^[\d-]+-stable(-ee)?$/
237
  allow_failure: yes
238 239 240 241 242 243 244 245 246 247 248
  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
249

250 251
rake db:migrate:reset:
  stage: test
252
  <<: *use-db
253 254 255
  script:
    - rake db:migrate:reset

256
rake db:seed_fu:
257 258 259
  stage: test
  <<: *use-db
  variables:
260
    SIZE: "1"
261
    SETUP_DB: "false"
262
    RAILS_ENV: "development"
263
  script:
264 265 266
    - 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
267 268 269 270 271
  artifacts:
    when: on_failure
    expire_in: 1d
    paths:
      - log/development.log
272

273 274
teaspoon:
  stage: test
275
  <<: *use-db
276
  script:
277 278 279
    - curl --silent --location https://deb.nodesource.com/setup_6.x | bash -
    - apt-get install --assume-yes nodejs
    - npm install --global istanbul
280
    - rake teaspoon
281 282 283 284 285
  artifacts:
    name: coverage-javascript
    expire_in: 31d
    paths:
    - coverage-javascript/default/
286

287 288 289 290 291 292 293
lint-doc:
  stage: test
  image: "phusion/baseimage:latest"
  before_script: []
  script:
    - scripts/lint-doc.sh

294 295 296 297 298 299
bundler:check:
 stage: test
 <<: *ruby-static-analysis
 script:
   - bundle check

300
bundler:audit:
301
  stage: test
302
  <<: *ruby-static-analysis
303
  only:
304 305
    - master@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
306 307
    - master@gitlab/gitlabhq
    - master@gitlab/gitlab-ee
308
  script:
309
    - "bundle exec bundle-audit check --update --ignore OSVDB-115941"
310

311 312 313
migration paths:
  stage: test
  <<: *use-db
314 315
  variables:
    SETUP_DB: "false"
316 317
  only:
    - master@gitlab-org/gitlab-ce
318 319 320
    - master@gitlab-org/gitlab-ee
    - master@gitlab/gitlabhq
    - master@gitlab/gitlab-ee
321 322 323 324
  script:
    - git checkout HEAD .
    - git fetch --tags
    - git checkout v8.5.9
325 326
    - cp config/resque.yml.example config/resque.yml
    - sed -i 's/localhost/redis/g' config/resque.yml
327 328 329
    - 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
330
    - source scripts/prepare_build.sh
331 332
    - rake db:migrate

333 334 335 336
coverage:
  stage: post-test
  services: []
  variables:
337
    SETUP_DB: "false"
338 339 340 341
    USE_BUNDLE_INSTALL: "true"
  script:
    - bundle exec scripts/merge-simplecov
  artifacts:
342
    name: coverage
343 344 345 346 347
    expire_in: 31d
    paths:
    - coverage/index.html
    - coverage/assets/

348 349 350 351 352 353 354 355
lint-javascript:
  stage: test
  image: "node:latest"
  before_script:
    - npm install
  script:
    - npm run eslint

356
# Trigger docs build
357
# https://gitlab.com/gitlab-com/doc-gitlab-com/blob/master/README.md#deployment-process
358 359
trigger_docs:
  stage: post-test
360 361 362
  image: "alpine"
  before_script:
    - apk update && apk add curl
363 364
  variables:
    GIT_STRATEGY: none
365 366
  cache: {}
  artifacts: {}
367
  script:
368
    - "curl -X POST -F token=${DOCS_TRIGGER_TOKEN} -F ref=master -F variables[PROJECT]=ce https://gitlab.com/api/v3/projects/1794617/trigger/builds"
369
  only:
370
    - master@gitlab-org/gitlab-ce
371

372
# Notify slack in the end
373 374

notify:slack:
375
  stage: post-test
376
  variables:
377
    SETUP_DB: "false"
378
    USE_BUNDLE_INSTALL: "false"
379
  script:
James Lopez's avatar
James Lopez committed
380
    - ./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>"
381 382 383 384 385
  when: on_failure
  only:
    - master@gitlab-org/gitlab-ce
    - tags@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
386
    - tags@gitlab-org/gitlab-ee
387 388 389 390 391 392

pages:
  before_script: []
  stage: pages
  dependencies:
    - coverage
393
    - teaspoon
394
  script:
395 396
    - mv public/ .public/
    - mkdir public/
397
    - mv coverage public/coverage-ruby
398
    - mv coverage-javascript/default/ public/coverage-javascript/
399 400 401
  artifacts:
    paths:
      - public
402 403
  only:
    - master
Jacob Vosmaer's avatar
Jacob Vosmaer committed
404 405 406 407 408 409 410 411 412 413 414 415 416

# 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