.gitlab-ci.yml 19.6 KB
Newer Older
Rémy Coutable's avatar
Rémy Coutable committed
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
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
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
294

setup-test-env:
  <<: *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
    - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init'
Jacob Vosmaer's avatar
Jacob Vosmaer committed
305
    - scripts/gitaly-test-build # Do not use 'bundle exec' here
306
307
308
  artifacts:
    expire_in: 7d
    paths:
309
      - node_modules
310
311
312
      - public/assets
      - tmp/tests

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
371
372
373
374
375
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
376

377
# Static analysis jobs
378
.ruby-static-analysis: &ruby-static-analysis
379
  <<: *pull-cache
380
381
382
383
  variables:
    SIMPLECOV: "false"
    SETUP_DB: "false"

384
.rake-exec: &rake-exec
385
  <<: *dedicated-runner
386
  <<: *except-docs-and-qa
387
  <<: *pull-cache
388
  <<: *ruby-static-analysis
389
390
  stage: test
  script:
391
    - bundle exec rake $CI_JOB_NAME
392

393
static-analysis:
394
  <<: *dedicated-runner
395
  <<: *except-docs
396
  <<: *ruby-static-analysis
397
398
  stage: test
  script:
399
    - scripts/static-analysis
400

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

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

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

448
# DB migration, rollback, and seed jobs
449
.db-migrate-reset: &db-migrate-reset
450
  <<: *dedicated-runner
451
  <<: *except-docs-and-qa
452
453
  <<: *pull-cache
  stage: test
454
  script:
455
    - bundle exec rake db:migrate:reset
456

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

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

465
466
467
468
469
470
db:check-schema-pg:
  <<: *db-migrate-reset
  <<: *use-pg
  script:
    - source scripts/schema_changed.sh

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

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

507
db:rollback-pg:
508
509
510
  <<: *db-rollback
  <<: *use-pg

511
db:rollback-mysql:
512
513
514
  <<: *db-rollback
  <<: *use-mysql

515
.gitlab-setup: &gitlab-setup
516
  <<: *dedicated-runner
517
  <<: *except-docs-and-qa
518
519
  <<: *pull-cache
  stage: test
520
521
522
  variables:
    SIZE: "1"
    SETUP_DB: "false"
523
    CREATE_DB_USER: "true"
524
    FIXTURE_PATH: db/fixtures/development
525
526
527
  script:
    - git clone https://gitlab.com/gitlab-org/gitlab-test.git
       /home/git/repositories/gitlab-org/gitlab-test.git
528
529
    - scripts/gitaly-test-spawn
    - force=yes bundle exec rake gitlab:setup
530
531
532
533
534
535
  artifacts:
    when: on_failure
    expire_in: 1d
    paths:
      - log/development.log

536
537
gitlab:setup-pg:
  <<: *gitlab-setup
538
539
  <<: *use-pg

540
541
gitlab:setup-mysql:
  <<: *gitlab-setup
542
543
  <<: *use-mysql

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

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

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

609
sast:
610
  <<: *except-docs
611
612
613
614
615
616
617
  image: registry.gitlab.com/gitlab-org/gl-sast:latest
  before_script: []
  script:
    - /app/bin/run .
  artifacts:
    paths: [gl-sast-report.json]

618
qa:internal:
619
  <<: *dedicated-runner
620
  <<: *except-docs
621
622
623
624
625
626
627
628
629
  stage: test
  variables:
    SETUP_DB: "false"
  services: []
  script:
    - cd qa/
    - bundle install
    - bundle exec rspec

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

642
coverage:
643
  <<: *dedicated-runner
644
  <<: *except-docs-and-qa
645
646
647
  <<: *pull-cache
  stage: post-test
  services: []
648
649
650
651
652
  variables:
    SETUP_DB: "false"
    USE_BUNDLE_INSTALL: "true"
  script:
    - bundle exec scripts/merge-simplecov
653
  coverage: '/LOC \((\d+\.\d+%)\) covered.$/'
654
655
656
657
658
659
660
  artifacts:
    name: coverage
    expire_in: 31d
    paths:
    - coverage/index.html
    - coverage/assets/

661
lint:javascript:report:
662
  <<: *dedicated-runner
663
  <<: *except-docs-and-qa
664
  <<: *pull-cache
665
  stage: post-test
666
667
  dependencies:
    - setup-test-env
668
  before_script: []
669
  script:
670
    - find app/ spec/ -name '*.js' -exec sed --in-place 's|/\* eslint-disable .*\*/||' {} \; # run report over all files
671
    - yarn run eslint-report || true # ignore exit code
672
673
674
675
676
  artifacts:
    name: eslint-report
    expire_in: 31d
    paths:
    - eslint-report.html
677
678

pages:
679
680
  <<: *dedicated-runner
  <<: *pull-cache
681
682
683
684
  before_script: []
  stage: pages
  dependencies:
    - coverage
685
686
    - karma
    - gitlab:assets:compile
687
    - lint:javascript:report
688
689
690
  script:
    - mv public/ .public/
    - mkdir public/
691
    - mv coverage/ public/coverage-ruby/ || true
692
    - mv coverage-javascript/ public/coverage-javascript/ || true
693
    - mv eslint-report.html public/ || true
694
    - mv webpack-report/ public/webpack-report/ || true
695
696
697
698
  artifacts:
    paths:
      - public
  only:
699
    - master@gitlab-org/gitlab-ce
700
    - master@gitlab-org/gitlab-ee
701
702
703
704

# Insurance in case a gem needed by one of our releases gets yanked from
# rubygems.org in the future.
cache gems:
705
  <<: *dedicated-runner
706
  <<: *pull-cache
707
708
709
710
711
712
713
714
715
  only:
    - tags
  variables:
    SETUP_DB: "false"
  script:
    - bundle package --all --all-platforms
  artifacts:
    paths:
      - vendor/cache
716
717
  only:
    - master@gitlab-org/gitlab-ce
718
    - master@gitlab-org/gitlab-ee
719
720

gitlab_git_test:
721
  <<: *dedicated-runner
722
  <<: *except-docs-and-qa
723
  <<: *pull-cache
724
725
726
727
  variables:
    SETUP_DB: "false"
  script:
    - spec/support/prepare-gitlab-git-test-for-commit --check-for-changes