.gitlab-ci.yml 10.8 KB
Newer Older
Z.J. van de Weg's avatar
Z.J. van de Weg committed
1
image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.3.3-git-2.7-phantomjs-2.1-node-7.1"
2

3
cache:
Z.J. van de Weg's avatar
Z.J. van de Weg committed
4
  key: "ruby-233"
5
  paths:
6
  - vendor/ruby
7

8
9
variables:
  MYSQL_ALLOW_EMPTY_PASSWORD: "1"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
10
11
  RAILS_ENV: "test"
  SIMPLECOV: "true"
12
  SETUP_DB: "true"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
13
  USE_BUNDLE_INSTALL: "true"
14
  GIT_DEPTH: "20"
15
  PHANTOMJS_VERSION: "2.1.1"
16
  GET_SOURCES_ATTEMPTS: "3"
17

Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
18
before_script:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
19
  - source ./scripts/prepare_build.sh
Valery Sizov's avatar
Valery Sizov committed
20
  - cp config/gitlab.yml.example config/gitlab.yml
Kamil Trzcinski's avatar
Test    
Kamil Trzcinski committed
21
  - bundle --version
22
  - '[ "$USE_BUNDLE_INSTALL" != "true" ] || retry bundle install --without postgres production --jobs $(nproc) $FLAGS'
Kamil Trzcinski's avatar
Kamil Trzcinski committed
23
  - retry gem install knapsack
Alfredo Sumaran's avatar
Alfredo Sumaran committed
24
  - '[ "$SETUP_DB" != "true" ] || bundle exec rake db:drop db:create db:schema:load db:migrate add_limits_mysql'
25

Kamil Trzcinski's avatar
Kamil Trzcinski committed
26
stages:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
27
- prepare
Kamil Trzcinski's avatar
Kamil Trzcinski committed
28
- test
29
- post-test
30
- pages
31

32
33
34
35
36
# Predefined scopes
.dedicated-runner: &dedicated-runner
  tags:
    - gitlab-org

37
38
39
40
41
42
43
44
45
46
47
48
49
50
.knapsack-state: &knapsack-state
  services: []
  variables:
    SETUP_DB: "false"
    USE_BUNDLE_INSTALL: "false"
  cache:
    key: "knapsack"
    paths:
    - knapsack/
  artifacts:
    expire_in: 31d
    paths:
    - knapsack/

51
.use-db: &use-db
52
53
54
  services:
    - mysql:latest
    - redis:alpine
55

56
57
.rspec-knapsack: &rspec-knapsack
  stage: test
58
  <<: *dedicated-runner
59
60
  <<: *use-db
  script:
61
    - JOB_NAME=( $CI_JOB_NAME )
62
63
64
65
66
67
68
69
    - export CI_NODE_INDEX=${JOB_NAME[1]}
    - export CI_NODE_TOTAL=${JOB_NAME[2]}
    - export KNAPSACK_REPORT_PATH=knapsack/rspec_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
    - export KNAPSACK_GENERATE_REPORT=true
    - cp knapsack/rspec_report.json ${KNAPSACK_REPORT_PATH}
    - knapsack rspec "--color --format documentation"
  artifacts:
    expire_in: 31d
70
    when: always
71
72
    paths:
    - coverage/
73
74
    - knapsack/
    - tmp/capybara/
75
76
77

.spinach-knapsack: &spinach-knapsack
  stage: test
78
  <<: *dedicated-runner
79
80
  <<: *use-db
  script:
81
    - JOB_NAME=( $CI_JOB_NAME )
82
83
84
85
86
87
88
89
    - export CI_NODE_INDEX=${JOB_NAME[1]}
    - export CI_NODE_TOTAL=${JOB_NAME[2]}
    - export KNAPSACK_REPORT_PATH=knapsack/spinach_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
    - export KNAPSACK_GENERATE_REPORT=true
    - cp knapsack/spinach_report.json ${KNAPSACK_REPORT_PATH}
    - knapsack spinach "-r rerun" || retry '[[ -e tmp/spinach-rerun.txt ]] && bundle exec spinach -r rerun $(cat tmp/spinach-rerun.txt)'
  artifacts:
    expire_in: 31d
90
    when: always
91
92
    paths:
    - coverage/
93
94
    - knapsack/
    - tmp/capybara/
95

96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# Prepare and merge knapsack tests

knapsack:
  <<: *knapsack-state
  <<: *dedicated-runner
  stage: prepare
  script:
    - mkdir -p knapsack/
    - '[[ -f knapsack/rspec_report.json ]] || echo "{}" > knapsack/rspec_report.json'
    - '[[ -f knapsack/spinach_report.json ]] || echo "{}" > knapsack/spinach_report.json'

setup-test-env:
  <<: *use-db
  <<: *dedicated-runner
  stage: prepare
  script:
112
113
    - node --version
    - yarn --version
114
115
    - yarn install --pure-lockfile
    - yarn check # ensure that yarn.lock matches package.json
Mike Greiling's avatar
Mike Greiling committed
116
    - bundle exec rake gitlab:assets:compile
117
118
119
120
    - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init'
  artifacts:
    expire_in: 7d
    paths:
121
      - node_modules
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
      - public/assets
      - tmp/tests

update-knapsack:
  <<: *knapsack-state
  <<: *dedicated-runner
  stage: post-test
  script:
    - scripts/merge-reports knapsack/rspec_report.json knapsack/rspec_node_*.json
    - scripts/merge-reports knapsack/spinach_report.json knapsack/spinach_node_*.json
    - rm -f knapsack/*_node_*.json
  only:
    - master@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
    - master@gitlab/gitlabhq
    - master@gitlab/gitlab-ee

139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
rspec 0 20: *rspec-knapsack
rspec 1 20: *rspec-knapsack
rspec 2 20: *rspec-knapsack
rspec 3 20: *rspec-knapsack
rspec 4 20: *rspec-knapsack
rspec 5 20: *rspec-knapsack
rspec 6 20: *rspec-knapsack
rspec 7 20: *rspec-knapsack
rspec 8 20: *rspec-knapsack
rspec 9 20: *rspec-knapsack
rspec 10 20: *rspec-knapsack
rspec 11 20: *rspec-knapsack
rspec 12 20: *rspec-knapsack
rspec 13 20: *rspec-knapsack
rspec 14 20: *rspec-knapsack
rspec 15 20: *rspec-knapsack
rspec 16 20: *rspec-knapsack
rspec 17 20: *rspec-knapsack
rspec 18 20: *rspec-knapsack
rspec 19 20: *rspec-knapsack

spinach 0 10: *spinach-knapsack
spinach 1 10: *spinach-knapsack
spinach 2 10: *spinach-knapsack
spinach 3 10: *spinach-knapsack
spinach 4 10: *spinach-knapsack
spinach 5 10: *spinach-knapsack
spinach 6 10: *spinach-knapsack
spinach 7 10: *spinach-knapsack
spinach 8 10: *spinach-knapsack
spinach 9 10: *spinach-knapsack

# Other generic tests
.ruby-static-analysis: &ruby-static-analysis
  variables:
    SIMPLECOV: "false"
    SETUP_DB: "false"
    USE_BUNDLE_INSTALL: "true"

.exec: &exec
  <<: *ruby-static-analysis
180
  <<: *dedicated-runner
181
182
  stage: test
  script:
183
    - bundle exec $CI_JOB_NAME
184

185
rubocop:
186
187
188
189
190
191
  <<: *ruby-static-analysis
  <<: *dedicated-runner
  stage: test
  script:
    - bundle exec "rubocop --require rubocop-rspec"

192
193
rake haml_lint: *exec
rake scss_lint: *exec
194
rake config_lint: *exec
195
196
197
198
199
200
201
202
203
204
205
206
207
208
rake brakeman: *exec
rake flay: *exec
license_finder: *exec
rake downtime_check: *exec
rake ee_compat_check:
  <<: *exec
  only:
    - branches@gitlab-org/gitlab-ce
  except:
    - master
    - tags
    - /^[\d-]+-stable(-ee)?$/
  allow_failure: yes
  cache:
Z.J. van de Weg's avatar
Z.J. van de Weg committed
209
    key: "ruby233-ee_compat_check_repo"
210
211
212
213
    paths:
      - ee_compat_check/repo/
      - vendor/ruby
  artifacts:
214
    name: "${CI_JOB_NAME}_${CI_COMIT_REF_NAME}_${CI_COMMIT_SHA}"
215
216
217
218
219
220
221
222
    when: on_failure
    expire_in: 10d
    paths:
      - ee_compat_check/patches/*.patch

rake db:migrate:reset:
  stage: test
  <<: *use-db
223
  <<: *dedicated-runner
224
  script:
225
    - bundle exec rake db:migrate:reset
226

227
228
229
230
231
rake db:rollback:
  stage: test
  <<: *use-db
  <<: *dedicated-runner
  script:
232
233
    - bundle exec rake db:rollback STEP=120
    - bundle exec rake db:migrate
234

235
236
237
rake db:seed_fu:
  stage: test
  <<: *use-db
238
  <<: *dedicated-runner
239
240
241
242
243
244
245
246
247
248
249
250
251
252
  variables:
    SIZE: "1"
    SETUP_DB: "false"
    RAILS_ENV: "development"
  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

253
254
255
256
257
258
259
260
261
262
rake gitlab:assets:compile:
  stage: test
  <<: *dedicated-runner
  dependencies: []
  variables:
    NODE_ENV: "production"
    RAILS_ENV: "production"
    SETUP_DB: "false"
    USE_DB: "false"
    SKIP_STORAGE_VALIDATION: "true"
263
264
265
266
267
268
269
270
    WEBPACK_REPORT: "true"
  script:
    - bundle exec rake yarn:install gitlab:assets:compile
  artifacts:
    name: webpack-report
    expire_in: 31d
    paths:
    - webpack-report/
271

Clement Ho's avatar
Clement Ho committed
272
rake karma:
273
274
275
  cache:
    paths:
      - vendor/ruby
276
      - node_modules
277
278
  stage: test
  <<: *use-db
279
  <<: *dedicated-runner
280
  script:
281
    - bundle exec rake karma
282
  coverage: '/^Statements *: (\d+\.\d+%)/'
283
284
285
286
  artifacts:
    name: coverage-javascript
    expire_in: 31d
    paths:
287
    - coverage-javascript/
288
289
290

lint-doc:
  stage: test
291
  <<: *dedicated-runner
292
293
294
295
296
297
  image: "phusion/baseimage:latest"
  before_script: []
  script:
    - scripts/lint-doc.sh

bundler:check:
298
299
300
301
  stage: test
  <<: *dedicated-runner
  <<: *ruby-static-analysis
  script:
302
303
304
305
306
   - bundle check

bundler:audit:
  stage: test
  <<: *ruby-static-analysis
307
  <<: *dedicated-runner
308
309
310
311
312
313
  only:
    - master@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
    - master@gitlab/gitlabhq
    - master@gitlab/gitlab-ee
  script:
314
    - "bundle exec bundle-audit check --update"
315

Z.J. van de Weg's avatar
Z.J. van de Weg committed
316
317
318
migration paths:
  stage: test
  <<: *use-db
319
  <<: *dedicated-runner
320
321
  variables:
    SETUP_DB: "false"
322
323
324
325
326
  only:
    - master@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
    - master@gitlab/gitlabhq
    - master@gitlab/gitlab-ee
Z.J. van de Weg's avatar
Z.J. van de Weg committed
327
  script:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
328
329
    - git fetch origin v8.5.9
    - git checkout -f FETCH_HEAD
330
331
    - cp config/resque.yml.example config/resque.yml
    - sed -i 's/localhost/redis/g' config/resque.yml
332
    - bundle install --without postgres production --jobs $(nproc) $FLAGS --retry=3
333
    - bundle exec rake db:drop db:create db:schema:load db:seed_fu
334
    - git checkout $CI_COMMIT_SHA
335
    - source scripts/prepare_build.sh
336
    - bundle exec rake db:migrate
337
338
339
340

coverage:
  stage: post-test
  services: []
341
  <<: *dedicated-runner
342
343
344
345
346
  variables:
    SETUP_DB: "false"
    USE_BUNDLE_INSTALL: "true"
  script:
    - bundle exec scripts/merge-simplecov
347
  coverage: '/LOC \((\d+\.\d+%)\) covered.$/'
348
349
350
351
352
353
354
  artifacts:
    name: coverage
    expire_in: 31d
    paths:
    - coverage/index.html
    - coverage/assets/

355
lint:javascript:
356
  <<: *dedicated-runner
357
358
359
  cache:
    paths:
      - node_modules/
360
  stage: test
361
  before_script: []
362
  script:
363
    - yarn run eslint
364
365

lint:javascript:report:
366
  <<: *dedicated-runner
367
368
369
370
  cache:
    paths:
      - node_modules/
  stage: post-test
371
  before_script: []
372
  script:
373
    - find app/ spec/ -name '*.js' -exec sed --in-place 's|/\* eslint-disable .*\*/||' {} \; # run report over all files
374
    - yarn run eslint-report || true # ignore exit code
375
376
377
378
379
  artifacts:
    name: eslint-report
    expire_in: 31d
    paths:
    - eslint-report.html
380
381
382
383
384
385

# Trigger docs build
# https://gitlab.com/gitlab-com/doc-gitlab-com/blob/master/README.md#deployment-process
trigger_docs:
  stage: post-test
  image: "alpine"
386
  <<: *dedicated-runner
387
388
389
390
391
392
393
394
395
396
397
398
399
400
  before_script:
    - apk update && apk add curl
  variables:
    GIT_STRATEGY: none
  cache: {}
  artifacts: {}
  script:
    - "curl -X POST -F token=${DOCS_TRIGGER_TOKEN} -F ref=master -F variables[PROJECT]=ce https://gitlab.com/api/v3/projects/1794617/trigger/builds"
  only:
    - master@gitlab-org/gitlab-ce

# Notify slack in the end
notify:slack:
  stage: post-test
401
  <<: *dedicated-runner
402
403
404
405
  variables:
    SETUP_DB: "false"
    USE_BUNDLE_INSTALL: "false"
  script:
406
    - ./scripts/notify_slack.sh "#development" "Build on \`$CI_COMMIT_REF_NAME\` failed! Commit \`$(git log -1 --oneline)\` See <https://gitlab.com/gitlab-org/$(basename "$PWD")/commit/"$CI_COMMIT_SHA"/pipelines>"
407
408
409
410
411
412
413
414
415
416
  when: on_failure
  only:
    - master@gitlab-org/gitlab-ce
    - tags@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
    - tags@gitlab-org/gitlab-ee

pages:
  before_script: []
  stage: pages
417
  <<: *dedicated-runner
418
419
  dependencies:
    - coverage
Clement Ho's avatar
Clement Ho committed
420
    - rake karma
421
    - rake gitlab:assets:compile
422
    - lint:javascript:report
423
424
425
  script:
    - mv public/ .public/
    - mkdir public/
426
    - mv coverage/ public/coverage-ruby/ || true
427
    - mv coverage-javascript/ public/coverage-javascript/ || true
428
    - mv eslint-report.html public/ || true
429
    - mv webpack-report/ public/webpack-report/ || true
430
431
432
433
  artifacts:
    paths:
      - public
  only:
434
    - master@gitlab-org/gitlab-ce
435
    - master@gitlab-org/gitlab-ee
436
437
438
439

# Insurance in case a gem needed by one of our releases gets yanked from
# rubygems.org in the future.
cache gems:
440
  <<: *dedicated-runner
441
442
443
444
445
446
447
448
449
  only:
    - tags
  variables:
    SETUP_DB: "false"
  script:
    - bundle package --all --all-platforms
  artifacts:
    paths:
      - vendor/cache
450
451
  only:
    - master@gitlab-org/gitlab-ce
452
    - master@gitlab-org/gitlab-ee