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

3
.default-cache: &default-cache
Rémy Coutable's avatar
Rémy Coutable 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"
21
  ELASTIC_URL: "http://elastic:changeme@docker.elastic.co-elasticsearch-elasticsearch:9200"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
22
  RAILS_ENV: "test"
23
  NODE_ENV: "test"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
24
  SIMPLECOV: "true"
25
  GIT_DEPTH: "20"
26
  GIT_SUBMODULE_STRATEGY: "none"
27
  GET_SOURCES_ATTEMPTS: "3"
28 29
  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
30
  FLAKY_RSPEC_SUITE_REPORT_PATH: rspec_flaky/report-suite.json
Nick Thomas's avatar
Nick Thomas committed
31
  # This hack is needed to make ES not that memory hungry
32
  ES_JAVA_OPTS: "-Xms256m -Xmx256m"
33

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

39
stages:
40 41 42 43 44
  - build
  - prepare
  - test
  - post-test
  - pages
45
  - post-cleanup
Valery Sizov's avatar
Valery Sizov committed
46

47 48
# Predefined scopes
.dedicated-runner: &dedicated-runner
49
  retry: 1
50 51 52
  tags:
    - gitlab-org

53
.tests-metadata-state: &tests-metadata-state
54
  <<: *dedicated-runner
Kamil Trzcinski's avatar
Kamil Trzcinski committed
55
  variables:
56
    TESTS_METADATA_S3_BUCKET: "gitlab-ce-cache"
57 58
  before_script:
    - source scripts/utils.sh
Kamil Trzcinski's avatar
Kamil Trzcinski committed
59
  artifacts:
60
    expire_in: 31d
Kamil Trzcinski's avatar
Kamil Trzcinski committed
61
    paths:
62
      - knapsack/
63
      - rspec_flaky/
64

65 66
.use-pg: &use-pg
  services:
67
    - postgres:9.2
68
    - redis:alpine
69
    - docker.elastic.co/elasticsearch/elasticsearch:5.5.2
70

71 72 73 74 75 76
.use-pg-9-6: &use-pg-9-6
  services:
    - postgres:9.6
    - redis:alpine
    - docker.elastic.co/elasticsearch/elasticsearch:5.5.2

77
.use-mysql: &use-mysql
78 79 80
  services:
    - mysql:latest
    - redis:alpine
81
    - docker.elastic.co/elasticsearch/elasticsearch:5.5.2
82

83

84 85 86
# 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
87 88
.except-docs: &except-docs
  except:
89
    - /(^docs[\/-].*|.*-docs$)/
90

91
.rspec-metadata: &rspec-metadata
92
  <<: *dedicated-runner
93
  <<: *pull-cache
94
  <<: *except-docs
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
Kamil Trzcinski's avatar
Kamil Trzcinski committed
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
Stan Hu's avatar
Stan Hu committed
111
    - knapsack rspec "--color --format documentation"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
112
  artifacts:
113
    expire_in: 31d
114
    when: always
115
    paths:
116 117
      - coverage/
      - knapsack/
118
      - rspec_flaky/
119
      - tmp/capybara/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
120

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

125 126 127 128 129 130 131 132 133 134 135
.rspec-geo-pg-9-6: &rspec-metadata-pg-geo
  <<: *use-pg-9-6
  <<: *except-docs
  stage: test
  script:
    - export NO_KNAPSACK=1
    - export CACHE_CLASSES=true
    - source scripts/prepare_postgres_fdw.sh
    - scripts/gitaly-test-spawn
    - bundle exec rspec --color --format documentation --tag geo spec/

136 137
.rspec-metadata-mysql: &rspec-metadata-mysql
  <<: *rspec-metadata
138 139
  <<: *use-mysql

140
.spinach-metadata: &spinach-metadata
141
  <<: *dedicated-runner
142
  <<: *pull-cache
143
  <<: *except-docs
144
  stage: test
Kamil Trzcinski's avatar
Kamil Trzcinski committed
145
  script:
146
    - JOB_NAME=( $CI_JOB_NAME )
147 148
    - export CI_NODE_INDEX=${JOB_NAME[-2]}
    - export CI_NODE_TOTAL=${JOB_NAME[-1]}
149
    - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${JOB_NAME[0]}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
Kamil Trzcinski's avatar
Kamil Trzcinski committed
150
    - export KNAPSACK_GENERATE_REPORT=true
151
    - export CACHE_CLASSES=true
152
    - cp ${KNAPSACK_SPINACH_SUITE_REPORT_PATH} ${KNAPSACK_REPORT_PATH}
Jacob Vosmaer's avatar
Jacob Vosmaer committed
153
    - scripts/gitaly-test-spawn
154
    - knapsack spinach "-r rerun" -b || retry '[[ -e tmp/spinach-rerun.txt ]] && bundle exec spinach -b -r rerun $(cat tmp/spinach-rerun.txt)'
Kamil Trzcinski's avatar
Kamil Trzcinski committed
155
  artifacts:
156
    expire_in: 31d
157
    when: always
158
    paths:
159 160 161
      - coverage/
      - knapsack/
      - tmp/capybara/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
162

163 164
.spinach-metadata-pg: &spinach-metadata-pg
  <<: *spinach-metadata
165 166
  <<: *use-pg

167 168
.spinach-metadata-mysql: &spinach-metadata-mysql
  <<: *spinach-metadata
169 170
  <<: *use-mysql

171 172 173 174 175 176 177
.only-canonical-masters: &only-canonical-masters
  only:
    - master@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
    - master@gitlab/gitlabhq
    - master@gitlab/gitlab-ee

178
# Trigger a package build in omnibus-gitlab repository
179
build-package:
180
  image: ruby:2.4-alpine
181
  before_script: []
182
  stage: build
183
  cache: {}
184 185
  when: manual
  script:
186
    - scripts/trigger-build-omnibus
187 188 189
  only:
    - //@gitlab-org/gitlab-ce
    - //@gitlab-org/gitlab-ee
190

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

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

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

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

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

setup-test-env:
299
  <<: *use-pg
300
  <<: *dedicated-runner
301
  <<: *except-docs
302
  stage: prepare
303 304
  cache:
    <<: *default-cache
305
  script:
306
    - node --version
307
    - yarn install --frozen-lockfile --cache-folder .yarn-cache
Mike Greiling's avatar
Mike Greiling committed
308
    - bundle exec rake gitlab:assets:compile
309
    - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init'
Jacob Vosmaer's avatar
Jacob Vosmaer committed
310
    - scripts/gitaly-test-build # Do not use 'bundle exec' here
311 312 313
  artifacts:
    expire_in: 7d
    paths:
314
      - node_modules
315 316 317
      - public/assets
      - tmp/tests

318 319
rspec-pg geo: *rspec-metadata-pg-geo

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 371 372 373 374 375 376 377 378 379 380 381 382
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
383 384

# Static analysis jobs
385
.ruby-static-analysis: &ruby-static-analysis
386
  <<: *pull-cache
387 388
  variables:
    SIMPLECOV: "false"
389
    SETUP_DB: "false"
390

391
.rake-exec: &rake-exec
392
  <<: *ruby-static-analysis
393
  <<: *dedicated-runner
394
  <<: *except-docs
395
  <<: *pull-cache
396 397
  stage: test
  script:
398
    - bundle exec rake $CI_JOB_NAME
399

400
static-analysis:
401 402
  <<: *ruby-static-analysis
  <<: *dedicated-runner
403
  <<: *except-docs
404 405
  stage: test
  script:
406
    - scripts/static-analysis
407

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

428 429
downtime_check:
  <<: *rake-exec
430 431 432 433
  except:
    - master
    - tags
    - /^[\d-]+-stable(-ee)?$/
434
    - /(^docs[\/-].*|.*-docs$)/
435

436 437 438 439 440 441 442 443
ee_compat_check:
  <<: *rake-exec
  except:
    - master
    - tags
    - /^[\d-]+-stable(-ee)?/
    - branches@gitlab-org/gitlab-ee
    - branches@gitlab/gitlab-ee
444
  retry: 0
445 446
  artifacts:
    name: "${CI_JOB_NAME}_${CI_COMIT_REF_NAME}_${CI_COMMIT_SHA}"
447
    when: always
448 449 450 451
    expire_in: 10d
    paths:
      - ee_compat_check/patches/*.patch

452
# DB migration, rollback, and seed jobs
453
.db-migrate-reset: &db-migrate-reset
454
  <<: *dedicated-runner
455
  <<: *except-docs
456 457
  <<: *pull-cache
  stage: test
458
  script:
459
    - bundle exec rake db:migrate:reset
460

461
db:migrate:reset-pg:
462 463 464
  <<: *db-migrate-reset
  <<: *use-pg

465
db:migrate:reset-mysql:
466 467 468
  <<: *db-migrate-reset
  <<: *use-mysql

469 470
.migration-paths: &migration-paths
  <<: *dedicated-runner
471
  <<: *pull-cache
472
  <<: *except-docs
473
  stage: test
474 475
  variables:
    SETUP_DB: "false"
476
    CREATE_DB_USER: "true"
477
  script:
478
    - git fetch https://gitlab.com/gitlab-org/gitlab-ee.git v9.3.0-ee
479 480
    - git checkout -f FETCH_HEAD
    - bundle install $BUNDLE_INSTALL_FLAGS
481
    - cp config/gitlab.yml.example config/gitlab.yml
482 483 484 485 486 487 488 489 490 491 492 493 494 495
    - 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

496
.db-rollback: &db-rollback
497
  <<: *dedicated-runner
498
  <<: *except-docs
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 517
  <<: *pull-cache
  stage: test
518
  variables:
519
    SIZE: "1"
520
    SETUP_DB: "false"
521
    CREATE_DB_USER: "true"
522
  script:
523 524 525
    - 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
526 527 528 529 530
  artifacts:
    when: on_failure
    expire_in: 1d
    paths:
      - log/development.log
531

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

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

540 541 542 543
db:check-schema-pg:
  <<: *db-migrate-reset
  <<: *use-pg
  script:
544
    - sh scripts/schema_changed.sh
545

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

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

591
codequality:
592
  <<: *except-docs
593
  <<: *pull-cache
594 595 596 597 598 599 600 601 602
  before_script: []
  image: docker:latest
  stage: test
  variables:
    SETUP_DB: "false"
    DOCKER_DRIVER: overlay
  services:
    - docker:dind
  script:
Brian Neel's avatar
Brian Neel committed
603 604
    - cp .rubocop.yml .rubocop.yml.bak
    - grep -v "rubocop-gitlab-security" .rubocop.yml.bak > .rubocop.yml
605
    - 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:0.69.0 analyze -f json > raw_codeclimate.json
606
    - cat raw_codeclimate.json | docker run -i stedolan/jq -c 'map({check_name,fingerprint,location})' > codeclimate.json
Brian Neel's avatar
Brian Neel committed
607
    - mv .rubocop.yml.bak .rubocop.yml
608 609 610
  artifacts:
    paths: [codeclimate.json]

611 612 613 614 615 616 617 618 619 620
qa:internal:
  stage: test
  variables:
    SETUP_DB: "false"
  services: []
  script:
    - cd qa/
    - bundle install
    - bundle exec rspec

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

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

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

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

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