.gitlab-ci.yml 10.7 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:
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 61 62 63 64 65 66 67 68 69
  <<: *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
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 81 82 83 84 85 86 87 88 89
  <<: *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
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 183 184
  stage: test
  script:
    - bundle exec $CI_BUILD_NAME

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 214 215 216 217 218 219 220 221 222
    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
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 283 284 285
  artifacts:
    name: coverage-javascript
    expire_in: 31d
    paths:
286
    - coverage-javascript/
287 288 289

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

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

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

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

coverage:
  stage: post-test
  services: []
340
  <<: *dedicated-runner
341 342 343 344 345 346 347 348 349 350 351 352
  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/

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

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

# Trigger docs build
# https://gitlab.com/gitlab-com/doc-gitlab-com/blob/master/README.md#deployment-process
trigger_docs:
  stage: post-test
  image: "alpine"
384
  <<: *dedicated-runner
385 386 387 388 389 390 391 392 393 394 395 396 397 398 399
  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
400
  <<: *dedicated-runner
401 402 403 404
  variables:
    SETUP_DB: "false"
    USE_BUNDLE_INSTALL: "false"
  script:
405
    - ./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>"
406 407 408 409 410 411 412 413 414 415
  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
416
  <<: *dedicated-runner
417 418
  dependencies:
    - coverage
Clement Ho's avatar
Clement Ho committed
419
    - rake karma
420
    - rake gitlab:assets:compile
421
    - lint:javascript:report
422 423 424
  script:
    - mv public/ .public/
    - mkdir public/
425
    - mv coverage/ public/coverage-ruby/ || true
426
    - mv coverage-javascript/ public/coverage-javascript/ || true
427
    - mv eslint-report.html public/ || true
428
    - mv webpack-report/ public/webpack-report/ || true
429 430 431 432
  artifacts:
    paths:
      - public
  only:
433
    - master@gitlab-org/gitlab-ce
434
    - master@gitlab-org/gitlab-ee
435 436 437 438

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