.gitlab-ci.yml 18.4 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
.default-cache: &default-cache
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
4
  key: "ruby-235-with-yarn"
5
  paths:
6 7 8 9 10 11 12 13 14 15 16 17
    - vendor/ruby
    - .yarn-cache/

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

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

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

Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
31
before_script:
Kamil Trzcinski's avatar
Test  
Kamil Trzcinski committed
32
  - bundle --version
33 34
  - source scripts/utils.sh
  - source scripts/prepare_build.sh
35

Kamil Trzcinski's avatar
Kamil Trzcinski committed
36
stages:
37 38 39 40 41
  - build
  - prepare
  - test
  - post-test
  - pages
42
  - post-cleanup
43

44 45
# Predefined scopes
.dedicated-runner: &dedicated-runner
46
  retry: 1
47 48 49
  tags:
    - gitlab-org

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

109 110
.rspec-metadata-pg: &rspec-metadata-pg
  <<: *rspec-metadata
111 112
  <<: *use-pg

113 114
.rspec-metadata-mysql: &rspec-metadata-mysql
  <<: *rspec-metadata
115 116
  <<: *use-mysql

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

140 141
.spinach-metadata-pg: &spinach-metadata-pg
  <<: *spinach-metadata
142 143
  <<: *use-pg

144 145
.spinach-metadata-mysql: &spinach-metadata-mysql
  <<: *spinach-metadata
146 147
  <<: *use-mysql

148 149 150 151 152 153 154
.only-canonical-masters: &only-canonical-masters
  only:
    - master@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
    - master@gitlab/gitlabhq
    - master@gitlab/gitlab-ee

155
##
156
# Trigger a package build in omnibus-gitlab repository
157 158
#
package-qa:
159
  image: ruby:2.4-alpine
160
  before_script: []
161
  stage: build
162
  cache: {}
163 164
  when: manual
  script:
165
    - scripts/trigger-build-omnibus
166 167 168
  only:
    - //@gitlab-org/gitlab-ce
    - //@gitlab-org/gitlab-ee
169

170 171 172
# Review docs base
.review-docs: &review-docs
  image: ruby:2.4-alpine
173 174
  before_script:
    - gem install gitlab --no-doc
175 176 177 178 179 180 181 182
    # 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: []
183
  variables:
184
    GIT_STRATEGY: none
185 186 187 188 189 190 191 192 193 194 195
  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
196 197
    # 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
198
    url: http://$DOCS_GITLAB_REPO_SUFFIX-$CI_COMMIT_REF_SLUG.$DOCS_REVIEW_APPS_DOMAIN/$DOCS_GITLAB_REPO_SUFFIX
199 200
    on_stop: review-docs-cleanup
  script:
201
    - ./trigger-build-docs deploy
202 203 204 205 206 207 208 209 210

# 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:
211
    - ./trigger-build-docs cleanup
212

213 214 215
# Retrieve knapsack and rspec_flaky reports
retrieve-tests-metadata:
  <<: *tests-metadata-state
216
  <<: *except-docs
217
  stage: prepare
218
  cache:
219
    key: tests_metadata
220
    policy: pull
221
  script:
222
    - mkdir -p knapsack/${CI_PROJECT_NAME}/
223 224
    - 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
225 226
    - '[[ -f $KNAPSACK_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${KNAPSACK_RSPEC_SUITE_REPORT_PATH}'
    - '[[ -f $KNAPSACK_SPINACH_SUITE_REPORT_PATH ]] || echo "{}" > ${KNAPSACK_SPINACH_SUITE_REPORT_PATH}'
227
    - mkdir -p rspec_flaky/
228 229
    - 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}'
230

231 232
update-tests-metadata:
  <<: *tests-metadata-state
233
  <<: *only-canonical-masters
234
  stage: post-test
235
  cache:
236
    key: tests_metadata
237 238
    paths:
      - knapsack/
239
      - rspec_flaky/
240
    policy: push
241
  script:
242
    - retry gem install fog-aws mime-types
243 244
    - 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
245
    - scripts/merge-reports ${FLAKY_RSPEC_SUITE_REPORT_PATH} rspec_flaky/all_*_*.json
246 247
    - '[[ -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'
248
    - rm -f knapsack/${CI_PROJECT_NAME}/*_node_*.json
249
    - rm -f rspec_flaky/all_*.json rspec_flaky/new_*.json
250 251 252 253 254 255 256 257 258

flaky-examples-check:
  <<: *dedicated-runner
  image: ruby:2.3-alpine
  services: []
  before_script: []
  variables:
    SETUP_DB: "false"
    USE_BUNDLE_INSTALL: "false"
259
    NEW_FLAKY_SPECS_REPORT: rspec_flaky/report-new.json
260
  stage: post-test
261
  allow_failure: true
262
  retry: 0
263 264 265 266
  only:
    - branches
  except:
    - master
267
    - /(^docs[\/-].*|.*-docs$)/
268 269 270 271 272 273
  artifacts:
    expire_in: 30d
    paths:
      - rspec_flaky/
  script:
    - '[[ -f $NEW_FLAKY_SPECS_REPORT ]] || echo "{}" > ${NEW_FLAKY_SPECS_REPORT}'
274
    - scripts/merge-reports ${NEW_FLAKY_SPECS_REPORT} rspec_flaky/new_*_*.json
275
    - scripts/detect-new-flaky-examples $NEW_FLAKY_SPECS_REPORT
276 277

setup-test-env:
278
  <<: *use-pg
279
  <<: *dedicated-runner
280
  <<: *except-docs
281
  stage: prepare
282 283
  cache:
    <<: *default-cache
284
  script:
285
    - node --version
286
    - yarn install --frozen-lockfile --cache-folder .yarn-cache
Mike Greiling's avatar
Mike Greiling committed
287
    - bundle exec rake gitlab:assets:compile
288
    - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init'
Jacob Vosmaer's avatar
Jacob Vosmaer committed
289
    - scripts/gitaly-test-build # Do not use 'bundle exec' here
290 291 292
  artifacts:
    expire_in: 7d
    paths:
293
      - node_modules
294 295 296
      - public/assets
      - tmp/tests

297 298 299 300 301 302 303 304 305 306 307 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
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
360

361
# Static analysis jobs
362
.ruby-static-analysis: &ruby-static-analysis
363
  <<: *pull-cache
364 365 366 367
  variables:
    SIMPLECOV: "false"
    SETUP_DB: "false"

368
.rake-exec: &rake-exec
369
  <<: *ruby-static-analysis
370
  <<: *dedicated-runner
371
  <<: *except-docs
372
  <<: *pull-cache
373 374
  stage: test
  script:
375
    - bundle exec rake $CI_JOB_NAME
376

377
static-analysis:
378 379
  <<: *ruby-static-analysis
  <<: *dedicated-runner
380
  <<: *except-docs
381 382
  stage: test
  script:
383
    - scripts/static-analysis
384

385 386 387 388
# Documentation checks:
# - Check validity of relative links
# - Make sure cURL examples in API docs use the full switches
docs lint:
389
  <<: *dedicated-runner
390 391 392 393 394 395
  image: "registry.gitlab.com/gitlab-org/gitlab-build-images:nanoc-bootstrap-ruby-2.4-alpine"
  stage: test
  cache: {}
  dependencies: []
  before_script: []
  script:
396
    - scripts/lint-doc.sh
397
    - scripts/lint-changelog-yaml
398 399 400 401 402 403 404
    - mv doc/ /nanoc/content/
    - cd /nanoc
    # Build HTML from Markdown
    - bundle exec nanoc
    # Check the internal links
    - bundle exec nanoc check internal_links

405 406
downtime_check:
  <<: *rake-exec
407 408 409 410
  except:
    - master
    - tags
    - /^[\d-]+-stable(-ee)?$/
411
    - /(^docs[\/-].*|.*-docs$)/
412

413 414
ee_compat_check:
  <<: *rake-exec
415 416 417
  except:
    - master
    - tags
418
    - /^[\d-]+-stable(-ee)?/
419 420
    - branches@gitlab-org/gitlab-ee
    - branches@gitlab/gitlab-ee
421
  retry: 0
422
  artifacts:
423
    name: "${CI_JOB_NAME}_${CI_COMIT_REF_NAME}_${CI_COMMIT_SHA}"
424
    when: always
425 426 427 428
    expire_in: 10d
    paths:
      - ee_compat_check/patches/*.patch

429
# DB migration, rollback, and seed jobs
430
.db-migrate-reset: &db-migrate-reset
431
  <<: *dedicated-runner
432
  <<: *except-docs
433 434
  <<: *pull-cache
  stage: test
435
  script:
436
    - bundle exec rake db:migrate:reset
437

438
db:migrate:reset-pg:
439 440 441
  <<: *db-migrate-reset
  <<: *use-pg

442
db:migrate:reset-mysql:
443 444 445
  <<: *db-migrate-reset
  <<: *use-mysql

446 447
.migration-paths: &migration-paths
  <<: *dedicated-runner
448
  <<: *pull-cache
449
  <<: *except-docs
450
  stage: test
451 452
  variables:
    SETUP_DB: "false"
453
    CREATE_DB_USER: "true"
454
  script:
455
    - git fetch https://gitlab.com/gitlab-org/gitlab-ce.git v9.3.0
456 457
    - git checkout -f FETCH_HEAD
    - bundle install $BUNDLE_INSTALL_FLAGS
458
    - cp config/gitlab.yml.example config/gitlab.yml
459 460 461 462 463 464 465 466 467 468 469 470 471 472
    - 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

473
.db-rollback: &db-rollback
474
  <<: *dedicated-runner
475
  <<: *except-docs
476 477
  <<: *pull-cache
  stage: test
478
  script:
479
    - bundle exec rake db:rollback STEP=119
480
    - bundle exec rake db:migrate
481

482
db:rollback-pg:
483 484 485
  <<: *db-rollback
  <<: *use-pg

486
db:rollback-mysql:
487 488 489 490
  <<: *db-rollback
  <<: *use-mysql

.db-seed_fu: &db-seed_fu
491
  <<: *dedicated-runner
492
  <<: *except-docs
493 494
  <<: *pull-cache
  stage: test
495 496 497
  variables:
    SIZE: "1"
    SETUP_DB: "false"
498
    CREATE_DB_USER: "true"
499 500 501 502 503 504 505 506 507 508
  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

509
db:seed_fu-pg:
510 511 512
  <<: *db-seed_fu
  <<: *use-pg

513
db:seed_fu-mysql:
514 515 516
  <<: *db-seed_fu
  <<: *use-mysql

517 518 519 520 521 522
db:check-schema-pg:
  <<: *db-migrate-reset
  <<: *use-pg
  script:
    - source scripts/schema_changed.sh

523
# Frontend-related jobs
524
gitlab:assets:compile:
525
  <<: *dedicated-runner
526
  <<: *except-docs
527 528
  <<: *pull-cache
  stage: test
529 530 531 532 533 534
  dependencies: []
  variables:
    NODE_ENV: "production"
    RAILS_ENV: "production"
    SETUP_DB: "false"
    SKIP_STORAGE_VALIDATION: "true"
535
    WEBPACK_REPORT: "true"
Mike Greiling's avatar
Mike Greiling committed
536
    NO_COMPRESSION: "true"
537
  script:
538
    - yarn install --frozen-lockfile --production --cache-folder .yarn-cache
539
    - bundle exec rake gitlab:assets:compile
540 541 542 543
  artifacts:
    name: webpack-report
    expire_in: 31d
    paths:
544
      - webpack-report/
545

546
karma:
547
  <<: *use-pg
548
  <<: *dedicated-runner
549
  <<: *except-docs
550 551
  <<: *pull-cache
  stage: test
552 553
  variables:
    BABEL_ENV: "coverage"
554
    CHROME_LOG_FILE: "chrome_debug.log"
555
  script:
Jacob Vosmaer's avatar
Jacob Vosmaer committed
556
    - scripts/gitaly-test-spawn
557
    - bundle exec rake gettext:po_to_json
558
    - bundle exec rake karma
559
  coverage: '/^Statements *: (\d+\.\d+%)/'
560 561 562
  artifacts:
    name: coverage-javascript
    expire_in: 31d
563
    when: always
564
    paths:
565
    - chrome_debug.log
566
    - coverage-javascript/
567

568
codequality:
569
  <<: *except-docs
570
  <<: *pull-cache
571 572 573 574 575 576 577 578 579
  before_script: []
  image: docker:latest
  stage: test
  variables:
    SETUP_DB: "false"
    DOCKER_DRIVER: overlay
  services:
    - docker:dind
  script:
580 581
    - cp .rubocop.yml .rubocop.yml.bak
    - grep -v "rubocop-gitlab-security" .rubocop.yml.bak > .rubocop.yml
582
    - 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
583
    - cat raw_codeclimate.json | docker run -i stedolan/jq -c 'map({check_name,fingerprint,location})' > codeclimate.json
584
    - mv .rubocop.yml.bak .rubocop.yml
585 586 587
  artifacts:
    paths: [codeclimate.json]

588
qa:internal:
589
  <<: *except-docs
590 591 592 593 594 595 596 597 598
  stage: test
  variables:
    SETUP_DB: "false"
  services: []
  script:
    - cd qa/
    - bundle install
    - bundle exec rspec

599
coverage:
600
  <<: *dedicated-runner
601
  <<: *except-docs
602 603 604
  <<: *pull-cache
  stage: post-test
  services: []
605 606 607 608 609
  variables:
    SETUP_DB: "false"
    USE_BUNDLE_INSTALL: "true"
  script:
    - bundle exec scripts/merge-simplecov
610
  coverage: '/LOC \((\d+\.\d+%)\) covered.$/'
611 612 613 614 615 616 617
  artifacts:
    name: coverage
    expire_in: 31d
    paths:
    - coverage/index.html
    - coverage/assets/

618
lint:javascript:report:
619
  <<: *dedicated-runner
620
  <<: *except-docs
621
  <<: *pull-cache
622
  stage: post-test
623 624
  dependencies:
    - setup-test-env
625
  before_script: []
626
  script:
627
    - find app/ spec/ -name '*.js' -exec sed --in-place 's|/\* eslint-disable .*\*/||' {} \; # run report over all files
628
    - yarn run eslint-report || true # ignore exit code
629 630 631 632 633
  artifacts:
    name: eslint-report
    expire_in: 31d
    paths:
    - eslint-report.html
634 635

pages:
636 637
  <<: *dedicated-runner
  <<: *pull-cache
638 639 640 641
  before_script: []
  stage: pages
  dependencies:
    - coverage
642 643
    - karma
    - gitlab:assets:compile
644
    - lint:javascript:report
645 646 647
  script:
    - mv public/ .public/
    - mkdir public/
648
    - mv coverage/ public/coverage-ruby/ || true
649
    - mv coverage-javascript/ public/coverage-javascript/ || true
650
    - mv eslint-report.html public/ || true
651
    - mv webpack-report/ public/webpack-report/ || true
652 653 654 655
  artifacts:
    paths:
      - public
  only:
656
    - master@gitlab-org/gitlab-ce
657
    - master@gitlab-org/gitlab-ee
658 659 660 661

# Insurance in case a gem needed by one of our releases gets yanked from
# rubygems.org in the future.
cache gems:
662
  <<: *dedicated-runner
663
  <<: *pull-cache
664 665 666 667 668 669 670 671 672
  only:
    - tags
  variables:
    SETUP_DB: "false"
  script:
    - bundle package --all --all-platforms
  artifacts:
    paths:
      - vendor/cache
673 674
  only:
    - master@gitlab-org/gitlab-ce
675
    - master@gitlab-org/gitlab-ee
676 677

gitlab_git_test:
678 679
  <<: *pull-cache
  <<: *except-docs
680 681 682 683
  variables:
    SETUP_DB: "false"
  script:
    - spec/support/prepare-gitlab-git-test-for-commit --check-for-changes