.gitlab-ci.yml 10.5 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
  # retry tests only in CI environment
  RSPEC_RETRY_RETRY_COUNT: "3"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
12
13
  RAILS_ENV: "test"
  SIMPLECOV: "true"
14
  SETUP_DB: "true"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
15
  USE_BUNDLE_INSTALL: "true"
16
  GIT_DEPTH: "20"
17
  PHANTOMJS_VERSION: "2.1.1"
18
  GET_SOURCES_ATTEMPTS: "3"
19

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

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

34
35
36
37
38
# Predefined scopes
.dedicated-runner: &dedicated-runner
  tags:
    - gitlab-org

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

53
.use-db: &use-db
54
55
56
  services:
    - mysql:latest
    - redis:alpine
57

58
59
.rspec-knapsack: &rspec-knapsack
  stage: test
60
  <<: *dedicated-runner
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
  <<: *use-db
  script:
    - JOB_NAME=( $CI_BUILD_NAME )
    - 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
    paths:
    - knapsack/
    - coverage/

.spinach-knapsack: &spinach-knapsack
  stage: test
78
  <<: *dedicated-runner
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
  <<: *use-db
  script:
    - JOB_NAME=( $CI_BUILD_NAME )
    - 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
    paths:
    - knapsack/
    - coverage/

94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# 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:
110
111
    - node --version
    - yarn --version
112
113
    - yarn install --pure-lockfile
    - yarn check # ensure that yarn.lock matches package.json
Mike Greiling's avatar
Mike Greiling committed
114
    - bundle exec rake gitlab:assets:compile
115
116
117
118
    - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init'
  artifacts:
    expire_in: 7d
    paths:
119
      - node_modules
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
      - 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

137
138
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
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
178
  <<: *dedicated-runner
179
180
181
182
  stage: test
  script:
    - bundle exec $CI_BUILD_NAME

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

190
191
rake haml_lint: *exec
rake scss_lint: *exec
192
rake config_lint: *exec
193
194
195
196
197
198
199
200
201
202
203
204
205
206
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
207
    key: "ruby233-ee_compat_check_repo"
208
209
210
211
212
213
214
215
216
217
218
219
220
    paths:
      - ee_compat_check/repo/
      - vendor/ruby
  artifacts:
    name: "${CI_BUILD_NAME}_${CI_BUILD_REF_NAME}_${CI_BUILD_REF}"
    when: on_failure
    expire_in: 10d
    paths:
      - ee_compat_check/patches/*.patch

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

rake db:seed_fu:
  stage: test
  <<: *use-db
228
  <<: *dedicated-runner
229
230
231
232
233
234
235
236
237
238
239
240
241
242
  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

243
244
245
246
247
248
249
250
251
252
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"
253
254
255
256
257
258
259
260
    WEBPACK_REPORT: "true"
  script:
    - bundle exec rake yarn:install gitlab:assets:compile
  artifacts:
    name: webpack-report
    expire_in: 31d
    paths:
    - webpack-report/
261

Clement Ho's avatar
Clement Ho committed
262
rake karma:
263
264
265
  cache:
    paths:
      - vendor/ruby
266
      - node_modules
267
268
  stage: test
  <<: *use-db
269
  <<: *dedicated-runner
270
  script:
271
    - bundle exec rake karma
272
273
274
275
  artifacts:
    name: coverage-javascript
    expire_in: 31d
    paths:
276
    - coverage-javascript/
277
278
279

lint-doc:
  stage: test
280
  <<: *dedicated-runner
281
282
283
284
285
286
  image: "phusion/baseimage:latest"
  before_script: []
  script:
    - scripts/lint-doc.sh

bundler:check:
287
288
289
290
  stage: test
  <<: *dedicated-runner
  <<: *ruby-static-analysis
  script:
291
292
293
294
295
   - bundle check

bundler:audit:
  stage: test
  <<: *ruby-static-analysis
296
  <<: *dedicated-runner
297
298
299
300
301
302
  only:
    - master@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
    - master@gitlab/gitlabhq
    - master@gitlab/gitlab-ee
  script:
303
    - "bundle exec bundle-audit check --update"
304

Z.J. van de Weg's avatar
Z.J. van de Weg committed
305
306
307
migration paths:
  stage: test
  <<: *use-db
308
  <<: *dedicated-runner
309
310
  variables:
    SETUP_DB: "false"
311
312
313
314
315
  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
316
  script:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
317
318
    - git fetch origin v8.5.9
    - git checkout -f FETCH_HEAD
319
320
    - cp config/resque.yml.example config/resque.yml
    - sed -i 's/localhost/redis/g' config/resque.yml
321
    - bundle install --without postgres production --jobs $(nproc) $FLAGS --retry=3
322
    - bundle exec rake db:drop db:create db:schema:load db:seed_fu
Z.J. van de Weg's avatar
Z.J. van de Weg committed
323
    - git checkout $CI_BUILD_REF
324
    - source scripts/prepare_build.sh
325
    - bundle exec rake db:migrate
326
327
328
329

coverage:
  stage: post-test
  services: []
330
  <<: *dedicated-runner
331
332
333
334
335
336
337
338
339
340
341
342
  variables:
    SETUP_DB: "false"
    USE_BUNDLE_INSTALL: "true"
  script:
    - bundle exec scripts/merge-simplecov
  artifacts:
    name: coverage
    expire_in: 31d
    paths:
    - coverage/index.html
    - coverage/assets/

343
lint:javascript:
344
  <<: *dedicated-runner
345
346
347
  cache:
    paths:
      - node_modules/
348
  stage: test
349
  before_script: []
350
  script:
351
    - yarn run eslint
352
353

lint:javascript:report:
354
  <<: *dedicated-runner
355
356
357
358
  cache:
    paths:
      - node_modules/
  stage: post-test
359
  before_script: []
360
361
  script:
    - find app/ spec/ -name '*.js' -or -name '*.js.es6' -exec sed --in-place 's|/\* eslint-disable .*\*/||' {} \; # run report over all files
362
    - yarn run eslint-report || true # ignore exit code
363
364
365
366
367
  artifacts:
    name: eslint-report
    expire_in: 31d
    paths:
    - eslint-report.html
368
369
370
371
372
373

# Trigger docs build
# https://gitlab.com/gitlab-com/doc-gitlab-com/blob/master/README.md#deployment-process
trigger_docs:
  stage: post-test
  image: "alpine"
374
  <<: *dedicated-runner
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
  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
390
  <<: *dedicated-runner
391
392
393
394
  variables:
    SETUP_DB: "false"
    USE_BUNDLE_INSTALL: "false"
  script:
395
    - ./scripts/notify_slack.sh "#development" "Build on \`$CI_BUILD_REF_NAME\` failed! Commit \`$(git log -1 --oneline)\` See <https://gitlab.com/gitlab-org/$(basename "$PWD")/commit/"$CI_BUILD_REF"/pipelines>"
396
397
398
399
400
401
402
403
404
405
  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
406
  <<: *dedicated-runner
407
408
  dependencies:
    - coverage
Clement Ho's avatar
Clement Ho committed
409
    - rake karma
410
    - rake gitlab:assets:compile
411
    - lint:javascript:report
412
413
414
  script:
    - mv public/ .public/
    - mkdir public/
415
    - mv coverage/ public/coverage-ruby/ || true
416
    - mv coverage-javascript/ public/coverage-javascript/ || true
417
    - mv eslint-report.html public/ || true
418
    - mv webpack-report/ public/webpack-report/ || true
419
420
421
422
  artifacts:
    paths:
      - public
  only:
423
    - master@gitlab-org/gitlab-ce
424
425
426
427

# Insurance in case a gem needed by one of our releases gets yanked from
# rubygems.org in the future.
cache gems:
428
  <<: *dedicated-runner
429
430
431
432
433
434
435
436
437
  only:
    - tags
  variables:
    SETUP_DB: "false"
  script:
    - bundle package --all --all-platforms
  artifacts:
    paths:
      - vendor/cache
438
439
  only:
    - master@gitlab-org/gitlab-ce