GitLab steht Mittwoch, den 23. September, zwischen 10:00 und 12:00 Uhr aufgrund von Wartungsarbeiten nicht zur Verfügung.

.gitlab-ci.yml 9.25 KB
Newer Older
1
image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.3-git-2.7-phantomjs-2.1"
2

3
cache:
Z.J. van de Weg's avatar
Z.J. van de Weg committed
4
  key: "ruby-231"
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

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

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

33
# Prepare and merge knapsack tests
Kamil Trzcinski's avatar
Kamil Trzcinski committed
34
.knapsack-state: &knapsack-state
35
  services: []
Kamil Trzcinski's avatar
Kamil Trzcinski committed
36
  variables:
37
    SETUP_DB: "false"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
38 39 40 41 42 43
    USE_BUNDLE_INSTALL: "false"
  cache:
    key: "knapsack"
    paths:
    - knapsack/
  artifacts:
44
    expire_in: 31d
Kamil Trzcinski's avatar
Kamil Trzcinski committed
45
    paths:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
46
    - knapsack/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
47

Kamil Trzcinski's avatar
Kamil Trzcinski committed
48
knapsack:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
49
  <<: *knapsack-state
Kamil Trzcinski's avatar
Kamil Trzcinski committed
50 51 52 53 54 55 56
  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'

update-knapsack:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
57
  <<: *knapsack-state
58 59 60 61 62
  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
63 64
  only:
    - master
65

66 67
# Execute all testing suites

68
.use-db: &use-db
69 70 71
  services:
    - mysql:latest
    - redis:alpine
72

Kamil Trzcinski's avatar
Kamil Trzcinski committed
73
.rspec-knapsack: &rspec-knapsack
74
  stage: test
75
  <<: *use-db
76
  script:
77 78 79 80
    - bundle exec rake assets:precompile 2>/dev/null
    - JOB_NAME=( $CI_BUILD_NAME )
    - export CI_NODE_INDEX=${JOB_NAME[1]}
    - export CI_NODE_TOTAL=${JOB_NAME[2]}
Kamil Trzcinski's avatar
Kamil Trzcinski committed
81
    - export KNAPSACK_REPORT_PATH=knapsack/rspec_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
82
    - export KNAPSACK_GENERATE_REPORT=true
Kamil Trzcinski's avatar
Kamil Trzcinski committed
83
    - cp knapsack/rspec_report.json ${KNAPSACK_REPORT_PATH}
Stan Hu's avatar
Stan Hu committed
84
    - knapsack rspec "--color --format documentation"
85
  artifacts:
86
    expire_in: 31d
87 88
    paths:
    - knapsack/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
89
    - coverage/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
90

Kamil Trzcinski's avatar
Kamil Trzcinski committed
91
.spinach-knapsack: &spinach-knapsack
Kamil Trzcinski's avatar
Kamil Trzcinski committed
92
  stage: test
93
  <<: *use-db
Kamil Trzcinski's avatar
Kamil Trzcinski committed
94 95 96 97 98 99 100 101
  script:
    - bundle exec rake assets:precompile 2>/dev/null
    - 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}
Kamil Trzcinski's avatar
Kamil Trzcinski committed
102
    - knapsack spinach "-r rerun" || retry '[[ -e tmp/spinach-rerun.txt ]] && bundle exec spinach -r rerun $(cat tmp/spinach-rerun.txt)'
Kamil Trzcinski's avatar
Kamil Trzcinski committed
103
  artifacts:
104
    expire_in: 31d
Kamil Trzcinski's avatar
Kamil Trzcinski committed
105 106
    paths:
    - knapsack/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
107
    - coverage/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139

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
Kamil Trzcinski's avatar
Kamil Trzcinski committed
140

141 142
# Execute all testing suites against Ruby 2.1
.ruby-21: &ruby-21
143
  image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.1-git-2.7-phantomjs-2.1"
144
  <<: *use-db
Connor Shea's avatar
Connor Shea committed
145 146
  only:
    - master
147
  cache:
148
    key: "ruby21"
149 150
    paths:
      - vendor/ruby
151

152
.rspec-knapsack-ruby21: &rspec-knapsack-ruby21
Kamil Trzcinski's avatar
Kamil Trzcinski committed
153
  <<: *rspec-knapsack
154
  <<: *ruby-21
Kamil Trzcinski's avatar
Kamil Trzcinski committed
155

156
.spinach-knapsack-ruby21: &spinach-knapsack-ruby21
Kamil Trzcinski's avatar
Kamil Trzcinski committed
157
  <<: *spinach-knapsack
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
  <<: *ruby-21

rspec 0 20 ruby21: *rspec-knapsack-ruby21
rspec 1 20 ruby21: *rspec-knapsack-ruby21
rspec 2 20 ruby21: *rspec-knapsack-ruby21
rspec 3 20 ruby21: *rspec-knapsack-ruby21
rspec 4 20 ruby21: *rspec-knapsack-ruby21
rspec 5 20 ruby21: *rspec-knapsack-ruby21
rspec 6 20 ruby21: *rspec-knapsack-ruby21
rspec 7 20 ruby21: *rspec-knapsack-ruby21
rspec 8 20 ruby21: *rspec-knapsack-ruby21
rspec 9 20 ruby21: *rspec-knapsack-ruby21
rspec 10 20 ruby21: *rspec-knapsack-ruby21
rspec 11 20 ruby21: *rspec-knapsack-ruby21
rspec 12 20 ruby21: *rspec-knapsack-ruby21
rspec 13 20 ruby21: *rspec-knapsack-ruby21
rspec 14 20 ruby21: *rspec-knapsack-ruby21
rspec 15 20 ruby21: *rspec-knapsack-ruby21
rspec 16 20 ruby21: *rspec-knapsack-ruby21
rspec 17 20 ruby21: *rspec-knapsack-ruby21
rspec 18 20 ruby21: *rspec-knapsack-ruby21
rspec 19 20 ruby21: *rspec-knapsack-ruby21

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

# Other generic tests
193

194
.ruby-static-analysis: &ruby-static-analysis
195 196
  variables:
    SIMPLECOV: "false"
197
    SETUP_DB: "false"
198
    USE_BUNDLE_INSTALL: "true"
199

200
.exec: &exec
201
  <<: *ruby-static-analysis
202 203
  stage: test
  script:
204
    - bundle exec $CI_BUILD_NAME
205

206
rubocop: *exec
Rémy Coutable's avatar
Rémy Coutable committed
207
rake haml_lint: *exec
208 209
rake scss_lint: *exec
rake brakeman: *exec
Connor Shea's avatar
Connor Shea committed
210
rake flay: *exec
Kamil Trzcinski's avatar
Kamil Trzcinski committed
211
license_finder: *exec
212
rake downtime_check: *exec
213 214 215 216 217 218
rake ce_to_ee_merge_check:
  <<: *exec
  only:
    - branches
  except:
    - tags
219
  allow_failure: yes
220

221 222
rake db:migrate:reset:
  stage: test
223
  <<: *use-db
224 225 226
  script:
    - rake db:migrate:reset

227
rake db:seed_fu:
228 229 230
  stage: test
  <<: *use-db
  variables:
231
    SIZE: "1"
232
    SETUP_DB: "false"
233
    RAILS_ENV: "development"
234
  script:
235 236 237
    - 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
238 239 240 241 242
  artifacts:
    when: on_failure
    expire_in: 1d
    paths:
      - log/development.log
243

244 245
teaspoon:
  stage: test
246
  <<: *use-db
247
  script:
248 249 250
    - curl --silent --location https://deb.nodesource.com/setup_6.x | bash -
    - apt-get install --assume-yes nodejs
    - npm install --global istanbul
251
    - teaspoon
252 253 254 255 256
  artifacts:
    name: coverage-javascript
    expire_in: 31d
    paths:
    - coverage-javascript/default/
257

258 259 260 261 262 263 264
lint-doc:
  stage: test
  image: "phusion/baseimage:latest"
  before_script: []
  script:
    - scripts/lint-doc.sh

265 266 267 268 269 270
bundler:check:
 stage: test
 <<: *ruby-static-analysis
 script:
   - bundle check

271
bundler:audit:
272
  stage: test
273
  <<: *ruby-static-analysis
274
  only:
275
    - master
276
  script:
277
    - "bundle exec bundle-audit check --update --ignore OSVDB-115941"
278

279 280 281 282 283 284 285 286 287
migration paths:
  stage: test
  <<: *use-db
  only:
    - master@gitlab-org/gitlab-ce
  script:
    - git checkout HEAD .
    - git fetch --tags
    - git checkout v8.5.9
288
    - mv config/resque.yml config/resque.yml.new
289 290 291 292
    - 'echo test: unix:/var/opt/gitlab/redis/redis.socket > config/resque.yml'
    - bundle install --without postgres production --jobs $(nproc) "${FLAGS[@]}" --retry=3
    - rake db:drop db:create db:schema:load db:seed_fu
    - git checkout $CI_BUILD_REF
293 294
    - rm config/resque.yml
    - mv config/resque.yml.new config/resque.yml
295 296
    - rake db:migrate

297 298 299 300
coverage:
  stage: post-test
  services: []
  variables:
301
    SETUP_DB: "false"
302 303 304 305
    USE_BUNDLE_INSTALL: "true"
  script:
    - bundle exec scripts/merge-simplecov
  artifacts:
306
    name: coverage
307 308 309 310 311
    expire_in: 31d
    paths:
    - coverage/index.html
    - coverage/assets/

312 313 314
# Trigger docs build
trigger_docs:
  stage: post-test
315 316 317
  before_script: []
  cache: {}
  artifacts: {}
318 319 320 321 322
  script:
    - "curl -X POST -F token=${DOCS_TRIGGER_TOKEN} -F ref=master https://gitlab.com/api/v3/projects/38069/trigger/builds"
  only:
    - master

323
# Notify slack in the end
324 325

notify:slack:
326
  stage: post-test
327
  variables:
328
    SETUP_DB: "false"
329
    USE_BUNDLE_INSTALL: "false"
330
  script:
James Lopez's avatar
James Lopez committed
331
    - ./scripts/notify_slack.sh "#builds" "Build on \`$CI_BUILD_REF_NAME\` failed! Commit \`$(git log -1 --oneline)\` See <https://gitlab.com/gitlab-org/$(basename "$PWD")/commit/"$CI_BUILD_REF"/builds>"
332 333 334 335 336
  when: on_failure
  only:
    - master@gitlab-org/gitlab-ce
    - tags@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
337
    - tags@gitlab-org/gitlab-ee
338 339 340 341 342 343

pages:
  before_script: []
  stage: pages
  dependencies:
    - coverage
344
    - teaspoon
345
  script:
346 347
    - mv public/ .public/
    - mkdir public/
348
    - mv coverage public/coverage-ruby
349
    - mv coverage-javascript/default/ public/coverage-javascript/
350 351 352
  artifacts:
    paths:
      - public
353 354
  only:
    - master
Jacob Vosmaer's avatar
Jacob Vosmaer committed
355 356 357 358 359 360 361 362 363 364 365 366 367

# Insurance in case a gem needed by one of our releases gets yanked from
# rubygems.org in the future.
cache gems:
  only:
    - tags
  variables:
    SETUP_DB: "false"
  script:
    - bundle package --all --all-platforms
  artifacts:
    paths:
      - vendor/cache