.gitlab-ci.yml 18.9 KB
Newer Older
1
image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.3.5-golang-1.8-git-2.14-chrome-63.0-node-8.x-yarn-1.2-postgresql-9.6"
2

3 4 5 6 7
.dedicated-runner: &dedicated-runner
  retry: 1
  tags:
    - gitlab-org

8
.default-cache: &default-cache
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
9
  key: "ruby-235-with-yarn"
10
  paths:
11 12 13 14 15 16 17 18 19 20 21 22
    - vendor/ruby
    - .yarn-cache/

.push-cache: &push-cache
  cache:
    <<: *default-cache
    policy: push

.pull-cache: &pull-cache
  cache:
    <<: *default-cache
    policy: pull
23

24 25
variables:
  MYSQL_ALLOW_EMPTY_PASSWORD: "1"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
26
  RAILS_ENV: "test"
Mike Greiling's avatar
Mike Greiling committed
27
  NODE_ENV: "test"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
28
  SIMPLECOV: "true"
29
  GIT_DEPTH: "20"
30
  GIT_SUBMODULE_STRATEGY: "none"
31
  GET_SOURCES_ATTEMPTS: "3"
32 33
  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
34
  FLAKY_RSPEC_SUITE_REPORT_PATH: rspec_flaky/report-suite.json
35

Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
36
before_script:
Kamil Trzcinski's avatar
Test  
Kamil Trzcinski committed
37
  - bundle --version
38 39
  - source scripts/utils.sh
  - source scripts/prepare_build.sh
40

Kamil Trzcinski's avatar
Kamil Trzcinski committed
41
stages:
42 43 44 45 46
  - build
  - prepare
  - test
  - post-test
  - pages
47
  - post-cleanup
48

49
# Predefined scopes
50
.tests-metadata-state: &tests-metadata-state
51
  <<: *dedicated-runner
52
  variables:
53
    TESTS_METADATA_S3_BUCKET: "gitlab-ce-cache"
54 55
  before_script:
    - source scripts/utils.sh
56 57 58
  artifacts:
    expire_in: 31d
    paths:
59
      - knapsack/
60
      - rspec_flaky/
61

62 63
.use-pg: &use-pg
  services:
64
    - postgres:9.2
65 66 67
    - redis:alpine

.use-mysql: &use-mysql
68 69 70
  services:
    - mysql:latest
    - redis:alpine
71

72 73 74
# Skip all jobs except the ones that begin with 'docs/'.
# Used for commits including ONLY documentation changes.
# https://docs.gitlab.com/ce/development/writing_documentation.html#testing
75 76
.except-docs: &except-docs
  except:
77
    - /(^docs[\/-].*|.*-docs$)/
78

79 80 81 82
.except-qa: &except-qa
  except:
    - /(^qa[\/-].*|.*-qa$)/

83
.rspec-metadata: &rspec-metadata
84
  <<: *dedicated-runner
85
  <<: *except-docs
86
  <<: *except-qa
87
  <<: *pull-cache
88
  stage: test
89
  script:
90
    - JOB_NAME=( $CI_JOB_NAME )
91 92
    - export CI_NODE_INDEX=${JOB_NAME[-2]}
    - export CI_NODE_TOTAL=${JOB_NAME[-1]}
93
    - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${JOB_NAME[0]}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
94
    - export KNAPSACK_GENERATE_REPORT=true
95 96 97
    - export SUITE_FLAKY_RSPEC_REPORT_PATH=${FLAKY_RSPEC_SUITE_REPORT_PATH}
    - export FLAKY_RSPEC_REPORT_PATH=rspec_flaky/all_${JOB_NAME[0]}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
    - export NEW_FLAKY_RSPEC_REPORT_PATH=rspec_flaky/new_${JOB_NAME[0]}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
98
    - export FLAKY_RSPEC_GENERATE_REPORT=true
99
    - export CACHE_CLASSES=true
100
    - cp ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} ${KNAPSACK_REPORT_PATH}
101
    - '[[ -f $FLAKY_RSPEC_REPORT_PATH ]] || echo "{}" > ${FLAKY_RSPEC_REPORT_PATH}'
102
    - '[[ -f $NEW_FLAKY_RSPEC_REPORT_PATH ]] || echo "{}" > ${NEW_FLAKY_RSPEC_REPORT_PATH}'
Jacob Vosmaer's avatar
Jacob Vosmaer committed
103
    - scripts/gitaly-test-spawn
104 105 106
    - knapsack rspec "--color --format documentation"
  artifacts:
    expire_in: 31d
107
    when: always
108
    paths:
109 110
      - coverage/
      - knapsack/
111
      - rspec_flaky/
112
      - tmp/capybara/
113

114 115
.rspec-metadata-pg: &rspec-metadata-pg
  <<: *rspec-metadata
116 117
  <<: *use-pg

118 119
.rspec-metadata-mysql: &rspec-metadata-mysql
  <<: *rspec-metadata
120 121
  <<: *use-mysql

122
.spinach-metadata: &spinach-metadata
123
  <<: *dedicated-runner
124
  <<: *except-docs
125
  <<: *except-qa
126
  <<: *pull-cache
127
  stage: test
128
  script:
129
    - JOB_NAME=( $CI_JOB_NAME )
130 131
    - export CI_NODE_INDEX=${JOB_NAME[-2]}
    - export CI_NODE_TOTAL=${JOB_NAME[-1]}
132
    - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${JOB_NAME[0]}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
133
    - export KNAPSACK_GENERATE_REPORT=true
134
    - export CACHE_CLASSES=true
135
    - cp ${KNAPSACK_SPINACH_SUITE_REPORT_PATH} ${KNAPSACK_REPORT_PATH}
Jacob Vosmaer's avatar
Jacob Vosmaer committed
136
    - scripts/gitaly-test-spawn
137
    - knapsack spinach "-r rerun" -b || retry '[[ -e tmp/spinach-rerun.txt ]] && bundle exec spinach -b -r rerun $(cat tmp/spinach-rerun.txt)'
138 139
  artifacts:
    expire_in: 31d
140
    when: always
141
    paths:
142 143 144
      - coverage/
      - knapsack/
      - tmp/capybara/
145

146 147
.spinach-metadata-pg: &spinach-metadata-pg
  <<: *spinach-metadata
148 149
  <<: *use-pg

150 151
.spinach-metadata-mysql: &spinach-metadata-mysql
  <<: *spinach-metadata
152 153
  <<: *use-mysql

154 155 156 157 158 159 160
.only-canonical-masters: &only-canonical-masters
  only:
    - master@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
    - master@gitlab/gitlabhq
    - master@gitlab/gitlab-ee

161
##
162
# Trigger a package build in omnibus-gitlab repository
163 164
#
package-qa:
165
  <<: *dedicated-runner
166
  image: ruby:2.4-alpine
167
  before_script: []
168
  stage: build
169
  cache: {}
170 171
  when: manual
  script:
172
    - scripts/trigger-build-omnibus
173 174 175
  only:
    - //@gitlab-org/gitlab-ce
    - //@gitlab-org/gitlab-ee
176

177 178
# Review docs base
.review-docs: &review-docs
179
  <<: *dedicated-runner
180
  <<: *except-qa
181
  image: ruby:2.4-alpine
182 183
  before_script:
    - gem install gitlab --no-doc
184 185 186 187 188 189 190 191
    # We need to download the script rather than clone the repo since the
    # review-docs-cleanup job will not be able to run when the branch gets
    # deleted (when merging the MR).
    - apk add --update openssl
    - wget https://gitlab.com/gitlab-org/gitlab-ce/raw/master/scripts/trigger-build-docs
    - chmod 755 trigger-build-docs
  cache: {}
  dependencies: []
192
  variables:
193
    GIT_STRATEGY: none
194 195 196 197 198 199 200 201 202 203 204
  when: manual
  only:
    - branches

# Trigger a docs build in gitlab-docs
# Useful to preview the docs changes live
review-docs-deploy:
  <<: *review-docs
  stage: build
  environment:
    name: review-docs/$CI_COMMIT_REF_NAME
205 206
    # DOCS_REVIEW_APPS_DOMAIN and DOCS_GITLAB_REPO_SUFFIX are secret variables
    # Discussion: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/14236/diffs#note_40140693
207
    url: http://$DOCS_GITLAB_REPO_SUFFIX-$CI_COMMIT_REF_SLUG.$DOCS_REVIEW_APPS_DOMAIN/$DOCS_GITLAB_REPO_SUFFIX
208 209
    on_stop: review-docs-cleanup
  script:
210
    - ./trigger-build-docs deploy
211 212 213 214 215 216 217 218 219

# Cleanup remote environment of gitlab-docs
review-docs-cleanup:
  <<: *review-docs
  stage: post-cleanup
  environment:
    name: review-docs/$CI_COMMIT_REF_NAME
    action: stop
  script:
220
    - ./trigger-build-docs cleanup
221

222 223 224
# Retrieve knapsack and rspec_flaky reports
retrieve-tests-metadata:
  <<: *tests-metadata-state
225
  <<: *except-docs
226
  <<: *except-qa
227
  stage: prepare
228
  cache:
229
    key: tests_metadata
230
    policy: pull
231
  script:
232
    - mkdir -p knapsack/${CI_PROJECT_NAME}/
233 234
    - wget -O $KNAPSACK_RSPEC_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$KNAPSACK_RSPEC_SUITE_REPORT_PATH || rm $KNAPSACK_RSPEC_SUITE_REPORT_PATH
    - wget -O $KNAPSACK_SPINACH_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$KNAPSACK_SPINACH_SUITE_REPORT_PATH || rm $KNAPSACK_SPINACH_SUITE_REPORT_PATH
235 236
    - '[[ -f $KNAPSACK_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${KNAPSACK_RSPEC_SUITE_REPORT_PATH}'
    - '[[ -f $KNAPSACK_SPINACH_SUITE_REPORT_PATH ]] || echo "{}" > ${KNAPSACK_SPINACH_SUITE_REPORT_PATH}'
237
    - mkdir -p rspec_flaky/
238 239
    - wget -O $FLAKY_RSPEC_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$FLAKY_RSPEC_SUITE_REPORT_PATH || rm $FLAKY_RSPEC_SUITE_REPORT_PATH
    - '[[ -f $FLAKY_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${FLAKY_RSPEC_SUITE_REPORT_PATH}'
240

241 242
update-tests-metadata:
  <<: *tests-metadata-state
243
  <<: *only-canonical-masters
244
  stage: post-test
245
  cache:
246
    key: tests_metadata
247 248
    paths:
      - knapsack/
249
      - rspec_flaky/
250
    policy: push
251
  script:
252
    - retry gem install fog-aws mime-types
253 254
    - scripts/merge-reports ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/rspec-pg_node_*.json
    - scripts/merge-reports ${KNAPSACK_SPINACH_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/spinach-pg_node_*.json
255
    - scripts/merge-reports ${FLAKY_RSPEC_SUITE_REPORT_PATH} rspec_flaky/all_*_*.json
256 257
    - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $KNAPSACK_RSPEC_SUITE_REPORT_PATH $KNAPSACK_SPINACH_SUITE_REPORT_PATH'
    - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $FLAKY_RSPEC_SUITE_REPORT_PATH'
258
    - rm -f knapsack/${CI_PROJECT_NAME}/*_node_*.json
259
    - rm -f rspec_flaky/all_*.json rspec_flaky/new_*.json
260 261 262 263 264 265 266 267 268

flaky-examples-check:
  <<: *dedicated-runner
  image: ruby:2.3-alpine
  services: []
  before_script: []
  variables:
    SETUP_DB: "false"
    USE_BUNDLE_INSTALL: "false"
269
    NEW_FLAKY_SPECS_REPORT: rspec_flaky/report-new.json
270
  stage: post-test
271
  allow_failure: true
272
  retry: 0
273 274 275 276
  only:
    - branches
  except:
    - master
277
    - /(^docs[\/-].*|.*-docs$)/
278
    - /(^qa[\/-].*|.*-qa$)/
279 280 281 282 283 284
  artifacts:
    expire_in: 30d
    paths:
      - rspec_flaky/
  script:
    - '[[ -f $NEW_FLAKY_SPECS_REPORT ]] || echo "{}" > ${NEW_FLAKY_SPECS_REPORT}'
285
    - scripts/merge-reports ${NEW_FLAKY_SPECS_REPORT} rspec_flaky/new_*_*.json
286
    - scripts/detect-new-flaky-examples $NEW_FLAKY_SPECS_REPORT
287 288 289

setup-test-env:
  <<: *dedicated-runner
290
  <<: *except-docs
291
  <<: *use-pg
292
  stage: prepare
293 294
  cache:
    <<: *default-cache
295
  script:
296
    - node --version
297
    - yarn install --frozen-lockfile --cache-folder .yarn-cache
Mike Greiling's avatar
Mike Greiling committed
298
    - bundle exec rake gitlab:assets:compile
299
    - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init'
Jacob Vosmaer's avatar
Jacob Vosmaer committed
300
    - scripts/gitaly-test-build # Do not use 'bundle exec' here
301 302 303
  artifacts:
    expire_in: 7d
    paths:
304
      - node_modules
305 306 307
      - public/assets
      - tmp/tests

308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370
rspec-pg 0 26: *rspec-metadata-pg
rspec-pg 1 26: *rspec-metadata-pg
rspec-pg 2 26: *rspec-metadata-pg
rspec-pg 3 26: *rspec-metadata-pg
rspec-pg 4 26: *rspec-metadata-pg
rspec-pg 5 26: *rspec-metadata-pg
rspec-pg 6 26: *rspec-metadata-pg
rspec-pg 7 26: *rspec-metadata-pg
rspec-pg 8 26: *rspec-metadata-pg
rspec-pg 9 26: *rspec-metadata-pg
rspec-pg 10 26: *rspec-metadata-pg
rspec-pg 11 26: *rspec-metadata-pg
rspec-pg 12 26: *rspec-metadata-pg
rspec-pg 13 26: *rspec-metadata-pg
rspec-pg 14 26: *rspec-metadata-pg
rspec-pg 15 26: *rspec-metadata-pg
rspec-pg 16 26: *rspec-metadata-pg
rspec-pg 17 26: *rspec-metadata-pg
rspec-pg 18 26: *rspec-metadata-pg
rspec-pg 19 26: *rspec-metadata-pg
rspec-pg 20 26: *rspec-metadata-pg
rspec-pg 21 26: *rspec-metadata-pg
rspec-pg 22 26: *rspec-metadata-pg
rspec-pg 23 26: *rspec-metadata-pg
rspec-pg 24 26: *rspec-metadata-pg
rspec-pg 25 26: *rspec-metadata-pg

rspec-mysql 0 26: *rspec-metadata-mysql
rspec-mysql 1 26: *rspec-metadata-mysql
rspec-mysql 2 26: *rspec-metadata-mysql
rspec-mysql 3 26: *rspec-metadata-mysql
rspec-mysql 4 26: *rspec-metadata-mysql
rspec-mysql 5 26: *rspec-metadata-mysql
rspec-mysql 6 26: *rspec-metadata-mysql
rspec-mysql 7 26: *rspec-metadata-mysql
rspec-mysql 8 26: *rspec-metadata-mysql
rspec-mysql 9 26: *rspec-metadata-mysql
rspec-mysql 10 26: *rspec-metadata-mysql
rspec-mysql 11 26: *rspec-metadata-mysql
rspec-mysql 12 26: *rspec-metadata-mysql
rspec-mysql 13 26: *rspec-metadata-mysql
rspec-mysql 14 26: *rspec-metadata-mysql
rspec-mysql 15 26: *rspec-metadata-mysql
rspec-mysql 16 26: *rspec-metadata-mysql
rspec-mysql 17 26: *rspec-metadata-mysql
rspec-mysql 18 26: *rspec-metadata-mysql
rspec-mysql 19 26: *rspec-metadata-mysql
rspec-mysql 20 26: *rspec-metadata-mysql
rspec-mysql 21 26: *rspec-metadata-mysql
rspec-mysql 22 26: *rspec-metadata-mysql
rspec-mysql 23 26: *rspec-metadata-mysql
rspec-mysql 24 26: *rspec-metadata-mysql
rspec-mysql 25 26: *rspec-metadata-mysql

spinach-pg 0 4: *spinach-metadata-pg
spinach-pg 1 4: *spinach-metadata-pg
spinach-pg 2 4: *spinach-metadata-pg
spinach-pg 3 4: *spinach-metadata-pg

spinach-mysql 0 4: *spinach-metadata-mysql
spinach-mysql 1 4: *spinach-metadata-mysql
spinach-mysql 2 4: *spinach-metadata-mysql
spinach-mysql 3 4: *spinach-metadata-mysql
371

372
# Static analysis jobs
373
.ruby-static-analysis: &ruby-static-analysis
374
  <<: *pull-cache
375 376 377 378
  variables:
    SIMPLECOV: "false"
    SETUP_DB: "false"

379
.rake-exec: &rake-exec
380
  <<: *dedicated-runner
381
  <<: *except-docs
382
  <<: *except-qa
383
  <<: *pull-cache
384
  <<: *ruby-static-analysis
385 386
  stage: test
  script:
387
    - bundle exec rake $CI_JOB_NAME
388

389
static-analysis:
390
  <<: *dedicated-runner
391
  <<: *except-docs
392
  <<: *ruby-static-analysis
393 394
  stage: test
  script:
395
    - scripts/static-analysis
396

397 398 399 400
# Documentation checks:
# - Check validity of relative links
# - Make sure cURL examples in API docs use the full switches
docs lint:
401
  <<: *dedicated-runner
402
  <<: *except-qa
403 404 405 406 407 408
  image: "registry.gitlab.com/gitlab-org/gitlab-build-images:nanoc-bootstrap-ruby-2.4-alpine"
  stage: test
  cache: {}
  dependencies: []
  before_script: []
  script:
409
    - scripts/lint-doc.sh
410
    - scripts/lint-changelog-yaml
411 412 413 414 415 416 417
    - mv doc/ /nanoc/content/
    - cd /nanoc
    # Build HTML from Markdown
    - bundle exec nanoc
    # Check the internal links
    - bundle exec nanoc check internal_links

418 419
downtime_check:
  <<: *rake-exec
420 421 422 423
  except:
    - master
    - tags
    - /^[\d-]+-stable(-ee)?$/
424
    - /(^docs[\/-].*|.*-docs$)/
425
    - /(^qa[\/-].*|.*-qa$)/
426

427 428
ee_compat_check:
  <<: *rake-exec
429 430 431
  except:
    - master
    - tags
432
    - /^[\d-]+-stable(-ee)?/
433 434
    - branches@gitlab-org/gitlab-ee
    - branches@gitlab/gitlab-ee
435
  retry: 0
436
  artifacts:
437
    name: "${CI_JOB_NAME}_${CI_COMIT_REF_NAME}_${CI_COMMIT_SHA}"
438
    when: always
439 440 441 442
    expire_in: 10d
    paths:
      - ee_compat_check/patches/*.patch

443
# DB migration, rollback, and seed jobs
444
.db-migrate-reset: &db-migrate-reset
445
  <<: *dedicated-runner
446
  <<: *except-docs
447
  <<: *except-qa
448 449
  <<: *pull-cache
  stage: test
450
  script:
451
    - bundle exec rake db:migrate:reset
452

453
db:migrate:reset-pg:
454 455 456
  <<: *db-migrate-reset
  <<: *use-pg

457
db:migrate:reset-mysql:
458 459 460
  <<: *db-migrate-reset
  <<: *use-mysql

461 462 463 464 465 466
db:check-schema-pg:
  <<: *db-migrate-reset
  <<: *use-pg
  script:
    - source scripts/schema_changed.sh

467 468
.migration-paths: &migration-paths
  <<: *dedicated-runner
469
  <<: *except-docs
470
  <<: *except-qa
471
  <<: *pull-cache
472
  stage: test
473 474
  variables:
    SETUP_DB: "false"
475
    CREATE_DB_USER: "true"
476
  script:
477
    - git fetch https://gitlab.com/gitlab-org/gitlab-ce.git v9.3.0
478 479
    - git checkout -f FETCH_HEAD
    - bundle install $BUNDLE_INSTALL_FLAGS
480
    - cp config/gitlab.yml.example config/gitlab.yml
481 482 483 484 485 486 487 488 489 490 491 492 493 494
    - bundle exec rake db:drop db:create db:schema:load db:seed_fu
    - git checkout $CI_COMMIT_SHA
    - bundle install $BUNDLE_INSTALL_FLAGS
    - . scripts/prepare_build.sh
    - bundle exec rake db:migrate

migration:path-pg:
  <<: *migration-paths
  <<: *use-pg

migration:path-mysql:
  <<: *migration-paths
  <<: *use-mysql

495
.db-rollback: &db-rollback
496
  <<: *dedicated-runner
497
  <<: *except-docs
498
  <<: *except-qa
499 500
  <<: *pull-cache
  stage: test
501
  script:
502
    - bundle exec rake db:rollback STEP=119
503
    - bundle exec rake db:migrate
504

505
db:rollback-pg:
506 507 508
  <<: *db-rollback
  <<: *use-pg

509
db:rollback-mysql:
510 511 512 513
  <<: *db-rollback
  <<: *use-mysql

.db-seed_fu: &db-seed_fu
514
  <<: *dedicated-runner
515
  <<: *except-docs
516
  <<: *except-qa
517 518
  <<: *pull-cache
  stage: test
519 520 521
  variables:
    SIZE: "1"
    SETUP_DB: "false"
522
    CREATE_DB_USER: "true"
523 524 525 526 527 528 529 530 531 532
  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

533
db:seed_fu-pg:
534 535 536
  <<: *db-seed_fu
  <<: *use-pg

537
db:seed_fu-mysql:
538 539 540
  <<: *db-seed_fu
  <<: *use-mysql

541
# Frontend-related jobs
542
gitlab:assets:compile:
543
  <<: *dedicated-runner
544
  <<: *except-docs
545
  <<: *except-qa
546 547
  <<: *pull-cache
  stage: test
548 549 550 551 552 553
  dependencies: []
  variables:
    NODE_ENV: "production"
    RAILS_ENV: "production"
    SETUP_DB: "false"
    SKIP_STORAGE_VALIDATION: "true"
554
    WEBPACK_REPORT: "true"
Mike Greiling's avatar
Mike Greiling committed
555
    NO_COMPRESSION: "true"
556
  script:
557
    - yarn install --frozen-lockfile --production --cache-folder .yarn-cache
558
    - bundle exec rake gitlab:assets:compile
559 560 561 562
  artifacts:
    name: webpack-report
    expire_in: 31d
    paths:
563
      - webpack-report/
564

565
karma:
566
  <<: *dedicated-runner
567
  <<: *except-docs
568
  <<: *except-qa
569
  <<: *pull-cache
570
  <<: *use-pg
571
  stage: test
572 573
  variables:
    BABEL_ENV: "coverage"
574
    CHROME_LOG_FILE: "chrome_debug.log"
575
  script:
Jacob Vosmaer's avatar
Jacob Vosmaer committed
576
    - scripts/gitaly-test-spawn
577
    - bundle exec rake gettext:po_to_json
578
    - bundle exec rake karma
579
  coverage: '/^Statements *: (\d+\.\d+%)/'
580 581 582
  artifacts:
    name: coverage-javascript
    expire_in: 31d
583
    when: always
584
    paths:
585
    - chrome_debug.log
586
    - coverage-javascript/
587

588
codequality:
589
  <<: *except-docs
590
  <<: *pull-cache
591 592 593 594 595 596 597 598 599
  before_script: []
  image: docker:latest
  stage: test
  variables:
    SETUP_DB: "false"
    DOCKER_DRIVER: overlay
  services:
    - docker:dind
  script:
600 601
    - cp .rubocop.yml .rubocop.yml.bak
    - grep -v "rubocop-gitlab-security" .rubocop.yml.bak > .rubocop.yml
602
    - docker run --env CODECLIMATE_CODE="$PWD" --volume "$PWD":/code --volume /var/run/docker.sock:/var/run/docker.sock --volume /tmp/cc:/tmp/cc codeclimate/codeclimate analyze -f json > raw_codeclimate.json
603
    - cat raw_codeclimate.json | docker run -i stedolan/jq -c 'map({check_name,fingerprint,location})' > codeclimate.json
604
    - mv .rubocop.yml.bak .rubocop.yml
605 606 607
  artifacts:
    paths: [codeclimate.json]

608
qa:internal:
609
  <<: *dedicated-runner
610
  <<: *except-docs
611 612 613 614 615 616 617 618 619
  stage: test
  variables:
    SETUP_DB: "false"
  services: []
  script:
    - cd qa/
    - bundle install
    - bundle exec rspec

620
coverage:
621
  <<: *dedicated-runner
622
  <<: *except-docs
623
  <<: *except-qa
624 625 626
  <<: *pull-cache
  stage: post-test
  services: []
627 628 629 630 631
  variables:
    SETUP_DB: "false"
    USE_BUNDLE_INSTALL: "true"
  script:
    - bundle exec scripts/merge-simplecov
632
  coverage: '/LOC \((\d+\.\d+%)\) covered.$/'
633 634 635 636 637 638 639
  artifacts:
    name: coverage
    expire_in: 31d
    paths:
    - coverage/index.html
    - coverage/assets/

640
lint:javascript:report:
641
  <<: *dedicated-runner
642
  <<: *except-docs
643
  <<: *except-qa
644
  <<: *pull-cache
645
  stage: post-test
646 647
  dependencies:
    - setup-test-env
648
  before_script: []
649
  script:
650
    - find app/ spec/ -name '*.js' -exec sed --in-place 's|/\* eslint-disable .*\*/||' {} \; # run report over all files
651
    - yarn run eslint-report || true # ignore exit code
652 653 654 655 656
  artifacts:
    name: eslint-report
    expire_in: 31d
    paths:
    - eslint-report.html
657 658

pages:
659 660
  <<: *dedicated-runner
  <<: *pull-cache
661 662 663 664
  before_script: []
  stage: pages
  dependencies:
    - coverage
665 666
    - karma
    - gitlab:assets:compile
667
    - lint:javascript:report
668 669 670
  script:
    - mv public/ .public/
    - mkdir public/
671
    - mv coverage/ public/coverage-ruby/ || true
672
    - mv coverage-javascript/ public/coverage-javascript/ || true
673
    - mv eslint-report.html public/ || true
674
    - mv webpack-report/ public/webpack-report/ || true
675 676 677 678
  artifacts:
    paths:
      - public
  only:
679
    - master@gitlab-org/gitlab-ce
680
    - master@gitlab-org/gitlab-ee
681 682 683 684

# Insurance in case a gem needed by one of our releases gets yanked from
# rubygems.org in the future.
cache gems:
685
  <<: *dedicated-runner
686
  <<: *pull-cache
687 688 689 690 691 692 693 694 695
  only:
    - tags
  variables:
    SETUP_DB: "false"
  script:
    - bundle package --all --all-platforms
  artifacts:
    paths:
      - vendor/cache
696 697
  only:
    - master@gitlab-org/gitlab-ce
698
    - master@gitlab-org/gitlab-ee
699 700

gitlab_git_test:
701
  <<: *dedicated-runner
702
  <<: *except-docs
703
  <<: *except-qa
704
  <<: *pull-cache
705 706 707 708
  variables:
    SETUP_DB: "false"
  script:
    - spec/support/prepare-gitlab-git-test-for-commit --check-for-changes