.gitlab-ci.yml 19.8 KB
Newer Older
1
image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.3.6-golang-1.9-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
9
  key: "ruby-2.3.6-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 65 66
    # As of Jan 2018, we don't have a strong reason to upgrade to 9.6 for CI yet,
    # so using the least common denominator ensures backwards compatibility
    # (as many users are still using 9.2).
67
    - postgres:9.2
68 69 70
    - redis:alpine

.use-mysql: &use-mysql
71 72 73
  services:
    - mysql:latest
    - redis:alpine
74

75 76 77
# 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
78 79
.except-docs: &except-docs
  except:
80
    - /(^docs[\/-].*|.*-docs$)/
81

82 83 84 85
.except-qa: &except-qa
  except:
    - /(^qa[\/-].*|.*-qa$)/

86 87 88 89 90
.except-docs-and-qa: &except-docs-and-qa
  except:
    - /(^docs[\/-].*|.*-docs$)/
    - /(^qa[\/-].*|.*-qa$)/

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

121 122
.rspec-metadata-pg: &rspec-metadata-pg
  <<: *rspec-metadata
123 124
  <<: *use-pg

125 126
.rspec-metadata-mysql: &rspec-metadata-mysql
  <<: *rspec-metadata
127 128
  <<: *use-mysql

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

152 153
.spinach-metadata-pg: &spinach-metadata-pg
  <<: *spinach-metadata
154 155
  <<: *use-pg

156 157
.spinach-metadata-mysql: &spinach-metadata-mysql
  <<: *spinach-metadata
158 159
  <<: *use-mysql

160 161 162 163 164 165 166
.only-canonical-masters: &only-canonical-masters
  only:
    - master@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
    - master@gitlab/gitlabhq
    - master@gitlab/gitlab-ee

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

183 184
# Review docs base
.review-docs: &review-docs
185
  <<: *dedicated-runner
186
  <<: *except-qa
187
  image: ruby:2.4-alpine
188 189
  before_script:
    - gem install gitlab --no-doc
190 191 192 193 194 195 196 197
    # 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: []
198
  variables:
199
    GIT_STRATEGY: none
200 201 202 203 204 205 206 207 208 209 210
  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
211 212
    # 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
213
    url: http://$DOCS_GITLAB_REPO_SUFFIX-$CI_COMMIT_REF_SLUG.$DOCS_REVIEW_APPS_DOMAIN/$DOCS_GITLAB_REPO_SUFFIX
214 215
    on_stop: review-docs-cleanup
  script:
216
    - ./trigger-build-docs deploy
217 218 219 220 221 222 223 224 225

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

228 229 230
# Retrieve knapsack and rspec_flaky reports
retrieve-tests-metadata:
  <<: *tests-metadata-state
231
  <<: *except-docs-and-qa
232
  stage: prepare
233
  cache:
234
    key: tests_metadata
235
    policy: pull
236
  script:
237
    - mkdir -p knapsack/${CI_PROJECT_NAME}/
238 239
    - 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
240 241
    - '[[ -f $KNAPSACK_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${KNAPSACK_RSPEC_SUITE_REPORT_PATH}'
    - '[[ -f $KNAPSACK_SPINACH_SUITE_REPORT_PATH ]] || echo "{}" > ${KNAPSACK_SPINACH_SUITE_REPORT_PATH}'
242
    - mkdir -p rspec_flaky/
243 244
    - 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}'
245

246 247
update-tests-metadata:
  <<: *tests-metadata-state
248
  <<: *only-canonical-masters
249
  stage: post-test
250
  cache:
251
    key: tests_metadata
252 253
    paths:
      - knapsack/
254
      - rspec_flaky/
255
    policy: push
256
  script:
257
    - retry gem install fog-aws mime-types
258 259
    - 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
260
    - scripts/merge-reports ${FLAKY_RSPEC_SUITE_REPORT_PATH} rspec_flaky/all_*_*.json
261 262
    - '[[ -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'
263
    - rm -f knapsack/${CI_PROJECT_NAME}/*_node_*.json
264
    - rm -f rspec_flaky/all_*.json rspec_flaky/new_*.json
265 266 267 268 269 270 271 272 273

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

293
compile-assets:
294
  <<: *dedicated-runner
295
  <<: *except-docs
296
  <<: *use-pg
297
  stage: prepare
298 299
  cache:
    <<: *default-cache
300
  script:
301
    - node --version
302
    - yarn install --frozen-lockfile --cache-folder .yarn-cache
Mike Greiling's avatar
Mike Greiling committed
303
    - bundle exec rake gitlab:assets:compile
304 305 306
  artifacts:
    expire_in: 7d
    paths:
307
      - node_modules
308
      - public/assets
309 310 311 312 313 314 315 316 317 318 319 320 321 322

setup-test-env:
  <<: *dedicated-runner
  <<: *except-docs
  <<: *use-pg
  stage: prepare
  cache:
    <<: *default-cache
  script:
    - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init'
    - scripts/gitaly-test-build # Do not use 'bundle exec' here
  artifacts:
    expire_in: 7d
    paths:
323 324
      - tmp/tests

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 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387
rspec-pg 0 27: *rspec-metadata-pg
rspec-pg 1 27: *rspec-metadata-pg
rspec-pg 2 27: *rspec-metadata-pg
rspec-pg 3 27: *rspec-metadata-pg
rspec-pg 4 27: *rspec-metadata-pg
rspec-pg 5 27: *rspec-metadata-pg
rspec-pg 6 27: *rspec-metadata-pg
rspec-pg 7 27: *rspec-metadata-pg
rspec-pg 8 27: *rspec-metadata-pg
rspec-pg 9 27: *rspec-metadata-pg
rspec-pg 10 27: *rspec-metadata-pg
rspec-pg 11 27: *rspec-metadata-pg
rspec-pg 12 27: *rspec-metadata-pg
rspec-pg 13 27: *rspec-metadata-pg
rspec-pg 14 27: *rspec-metadata-pg
rspec-pg 15 27: *rspec-metadata-pg
rspec-pg 16 27: *rspec-metadata-pg
rspec-pg 17 27: *rspec-metadata-pg
rspec-pg 18 27: *rspec-metadata-pg
rspec-pg 19 27: *rspec-metadata-pg
rspec-pg 20 27: *rspec-metadata-pg
rspec-pg 21 27: *rspec-metadata-pg
rspec-pg 22 27: *rspec-metadata-pg
rspec-pg 23 27: *rspec-metadata-pg
rspec-pg 24 27: *rspec-metadata-pg
rspec-pg 25 27: *rspec-metadata-pg
rspec-pg 26 27: *rspec-metadata-pg

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

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

spinach-mysql 0 3: *spinach-metadata-mysql
spinach-mysql 1 3: *spinach-metadata-mysql
spinach-mysql 2 3: *spinach-metadata-mysql
388

389
# Static analysis jobs
390
.ruby-static-analysis: &ruby-static-analysis
391
  <<: *pull-cache
392 393 394 395
  variables:
    SIMPLECOV: "false"
    SETUP_DB: "false"

396
.rake-exec: &rake-exec
397
  <<: *dedicated-runner
398
  <<: *except-docs-and-qa
399
  <<: *pull-cache
400
  <<: *ruby-static-analysis
401 402
  stage: test
  script:
403
    - bundle exec rake $CI_JOB_NAME
404

405
static-analysis:
406
  <<: *dedicated-runner
407
  <<: *except-docs
408
  <<: *ruby-static-analysis
409 410
  stage: test
  script:
411
    - scripts/static-analysis
412

413 414 415 416
# Documentation checks:
# - Check validity of relative links
# - Make sure cURL examples in API docs use the full switches
docs lint:
417
  <<: *dedicated-runner
418
  <<: *except-qa
419 420 421 422 423 424
  image: "registry.gitlab.com/gitlab-org/gitlab-build-images:nanoc-bootstrap-ruby-2.4-alpine"
  stage: test
  cache: {}
  dependencies: []
  before_script: []
  script:
425
    - scripts/lint-doc.sh
426
    - scripts/lint-changelog-yaml
427 428 429 430 431 432 433
    - mv doc/ /nanoc/content/
    - cd /nanoc
    # Build HTML from Markdown
    - bundle exec nanoc
    # Check the internal links
    - bundle exec nanoc check internal_links

434 435
downtime_check:
  <<: *rake-exec
436 437 438 439
  except:
    - master
    - tags
    - /^[\d-]+-stable(-ee)?$/
440
    - /(^docs[\/-].*|.*-docs$)/
441
    - /(^qa[\/-].*|.*-qa$)/
442

443 444
ee_compat_check:
  <<: *rake-exec
445 446 447
  except:
    - master
    - tags
448
    - /^[\d-]+-stable(-ee)?/
449
    - /^security-/
450 451
    - branches@gitlab-org/gitlab-ee
    - branches@gitlab/gitlab-ee
452
  retry: 0
453
  artifacts:
454
    name: "${CI_JOB_NAME}_${CI_COMIT_REF_NAME}_${CI_COMMIT_SHA}"
455
    when: always
456 457 458 459
    expire_in: 10d
    paths:
      - ee_compat_check/patches/*.patch

460
# DB migration, rollback, and seed jobs
461
.db-migrate-reset: &db-migrate-reset
462
  <<: *dedicated-runner
463
  <<: *except-docs-and-qa
464 465
  <<: *pull-cache
  stage: test
466
  script:
467
    - bundle exec rake db:migrate:reset
468

469
db:migrate:reset-pg:
470 471 472
  <<: *db-migrate-reset
  <<: *use-pg

473
db:migrate:reset-mysql:
474 475 476
  <<: *db-migrate-reset
  <<: *use-mysql

477 478 479 480 481 482
db:check-schema-pg:
  <<: *db-migrate-reset
  <<: *use-pg
  script:
    - source scripts/schema_changed.sh

483 484
.migration-paths: &migration-paths
  <<: *dedicated-runner
485
  <<: *except-docs-and-qa
486
  <<: *pull-cache
487
  stage: test
488 489
  variables:
    SETUP_DB: "false"
490
    CREATE_DB_USER: "true"
491
  script:
492
    - git fetch https://gitlab.com/gitlab-org/gitlab-ce.git v9.3.0
493 494
    - git checkout -f FETCH_HEAD
    - bundle install $BUNDLE_INSTALL_FLAGS
495
    - cp config/gitlab.yml.example config/gitlab.yml
496 497 498 499 500 501 502 503 504 505 506 507 508 509
    - 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

510
.db-rollback: &db-rollback
511
  <<: *dedicated-runner
512
  <<: *except-docs-and-qa
513 514
  <<: *pull-cache
  stage: test
515
  script:
516
    - bundle exec rake db:rollback STEP=119
517
    - bundle exec rake db:migrate
518

519
db:rollback-pg:
520 521 522
  <<: *db-rollback
  <<: *use-pg

523
db:rollback-mysql:
524 525 526
  <<: *db-rollback
  <<: *use-mysql

527
.gitlab-setup: &gitlab-setup
528
  <<: *dedicated-runner
529
  <<: *except-docs-and-qa
530 531
  <<: *pull-cache
  stage: test
532 533 534
  variables:
    SIZE: "1"
    SETUP_DB: "false"
535
    CREATE_DB_USER: "true"
536
    FIXTURE_PATH: db/fixtures/development
537 538 539
  script:
    - git clone https://gitlab.com/gitlab-org/gitlab-test.git
       /home/git/repositories/gitlab-org/gitlab-test.git
540 541
    - scripts/gitaly-test-spawn
    - force=yes bundle exec rake gitlab:setup
542 543 544 545 546 547
  artifacts:
    when: on_failure
    expire_in: 1d
    paths:
      - log/development.log

548 549
gitlab:setup-pg:
  <<: *gitlab-setup
550 551
  <<: *use-pg

552 553
gitlab:setup-mysql:
  <<: *gitlab-setup
554 555
  <<: *use-mysql

556
# Frontend-related jobs
557
gitlab:assets:compile:
558
  <<: *dedicated-runner
559
  <<: *except-docs-and-qa
560 561
  <<: *pull-cache
  stage: test
562 563 564 565 566 567
  dependencies: []
  variables:
    NODE_ENV: "production"
    RAILS_ENV: "production"
    SETUP_DB: "false"
    SKIP_STORAGE_VALIDATION: "true"
568
    WEBPACK_REPORT: "true"
Mike Greiling's avatar
Mike Greiling committed
569
    NO_COMPRESSION: "true"
570
  script:
571
    - yarn install --frozen-lockfile --production --cache-folder .yarn-cache
572
    - bundle exec rake gitlab:assets:compile
573 574 575 576
  artifacts:
    name: webpack-report
    expire_in: 31d
    paths:
577
      - webpack-report/
578

579
karma:
580
  <<: *dedicated-runner
581
  <<: *except-docs-and-qa
582
  <<: *pull-cache
583
  <<: *use-pg
584
  stage: test
585 586
  variables:
    BABEL_ENV: "coverage"
587
    CHROME_LOG_FILE: "chrome_debug.log"
588
  script:
Jacob Vosmaer's avatar
Jacob Vosmaer committed
589
    - scripts/gitaly-test-spawn
590
    - bundle exec rake gettext:po_to_json
591
    - bundle exec rake karma
592
  coverage: '/^Statements *: (\d+\.\d+%)/'
593 594 595
  artifacts:
    name: coverage-javascript
    expire_in: 31d
596
    when: always
597
    paths:
598
    - chrome_debug.log
599
    - coverage-javascript/
600

601
codequality:
602
  <<: *except-docs
603
  <<: *pull-cache
604 605 606 607 608 609 610 611 612
  before_script: []
  image: docker:latest
  stage: test
  variables:
    SETUP_DB: "false"
    DOCKER_DRIVER: overlay
  services:
    - docker:dind
  script:
613 614
    - cp .rubocop.yml .rubocop.yml.bak
    - grep -v "rubocop-gitlab-security" .rubocop.yml.bak > .rubocop.yml
Rémy Coutable's avatar
Rémy Coutable committed
615
    - docker run --env CODECLIMATE_CODE="$PWD" --volume "$PWD":/code --volume /var/run/docker.sock:/var/run/docker.sock --volume /tmp/cc:/tmp/cc dev.gitlab.org:5005/gitlab/gitlab-build-images:gitlab-codeclimate-v2 analyze -f json > raw_codeclimate.json
616
    - cat raw_codeclimate.json | docker run -i stedolan/jq -c 'map({check_name,fingerprint,location})' > codeclimate.json
617
    - mv .rubocop.yml.bak .rubocop.yml
618 619 620
  artifacts:
    paths: [codeclimate.json]

621
sast:
622
  <<: *except-docs
623 624 625 626 627 628 629
  image: registry.gitlab.com/gitlab-org/gl-sast:latest
  before_script: []
  script:
    - /app/bin/run .
  artifacts:
    paths: [gl-sast-report.json]

630
qa:internal:
631
  <<: *dedicated-runner
632
  <<: *except-docs
633 634 635 636 637 638 639 640 641
  stage: test
  variables:
    SETUP_DB: "false"
  services: []
  script:
    - cd qa/
    - bundle install
    - bundle exec rspec

642 643 644 645 646 647 648 649 650 651
qa:selectors:
  <<: *dedicated-runner
  <<: *except-docs
  stage: test
  variables:
    SETUP_DB: "false"
  services: []
  script:
    - cd qa/
    - bundle install
652
    - bundle exec bin/qa Test::Sanity::Selectors
653

654
coverage:
655
  <<: *dedicated-runner
656
  <<: *except-docs-and-qa
657 658 659
  <<: *pull-cache
  stage: post-test
  services: []
660 661 662 663 664
  variables:
    SETUP_DB: "false"
    USE_BUNDLE_INSTALL: "true"
  script:
    - bundle exec scripts/merge-simplecov
665
  coverage: '/LOC \((\d+\.\d+%)\) covered.$/'
666 667 668 669 670 671 672
  artifacts:
    name: coverage
    expire_in: 31d
    paths:
    - coverage/index.html
    - coverage/assets/

673
lint:javascript:report:
674
  <<: *dedicated-runner
675
  <<: *except-docs-and-qa
676
  <<: *pull-cache
677
  stage: post-test
678
  dependencies:
679
    - compile-assets
680
    - setup-test-env
681
  before_script: []
682
  script:
683
    - find app/ spec/ -name '*.js' -exec sed --in-place 's|/\* eslint-disable .*\*/||' {} \; # run report over all files
684
    - yarn run eslint-report || true # ignore exit code
685 686 687 688 689
  artifacts:
    name: eslint-report
    expire_in: 31d
    paths:
    - eslint-report.html
690 691

pages:
692 693
  <<: *dedicated-runner
  <<: *pull-cache
694 695 696 697
  before_script: []
  stage: pages
  dependencies:
    - coverage
698 699
    - karma
    - gitlab:assets:compile
700
    - lint:javascript:report
701 702 703
  script:
    - mv public/ .public/
    - mkdir public/
704
    - mv coverage/ public/coverage-ruby/ || true
705
    - mv coverage-javascript/ public/coverage-javascript/ || true
706
    - mv eslint-report.html public/ || true
707
    - mv webpack-report/ public/webpack-report/ || true
708 709 710 711
  artifacts:
    paths:
      - public
  only:
712
    - master@gitlab-org/gitlab-ce
713
    - master@gitlab-org/gitlab-ee
714 715 716 717

# Insurance in case a gem needed by one of our releases gets yanked from
# rubygems.org in the future.
cache gems:
718
  <<: *dedicated-runner
719
  <<: *pull-cache
720 721 722 723 724 725 726 727 728
  only:
    - tags
  variables:
    SETUP_DB: "false"
  script:
    - bundle package --all --all-platforms
  artifacts:
    paths:
      - vendor/cache
729 730
  only:
    - master@gitlab-org/gitlab-ce
731
    - master@gitlab-org/gitlab-ee
732 733

gitlab_git_test:
734
  <<: *dedicated-runner
735
  <<: *except-docs-and-qa
736
  <<: *pull-cache
737 738 739 740
  variables:
    SETUP_DB: "false"
  script:
    - spec/support/prepare-gitlab-git-test-for-commit --check-for-changes