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

.gitlab-ci.yml 8 KB
Newer Older
Z.J. van de Weg's avatar
Z.J. van de Weg committed
1
image: "ruby:2.3.1"
2

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

9 10
variables:
  MYSQL_ALLOW_EMPTY_PASSWORD: "1"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
11 12
  # retry tests only in CI environment
  RSPEC_RETRY_RETRY_COUNT: "3"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
13 14
  RAILS_ENV: "test"
  SIMPLECOV: "true"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
15
  USE_DB: "true"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
16
  USE_BUNDLE_INSTALL: "true"
17
  GIT_DEPTH: "20"
18
  PHANTOMJS_VERSION: "2.1.1"
19

Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
20
before_script:
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
Kamil Trzcinski's avatar
Kamil Trzcinski committed
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
Kamil Trzcinski's avatar
Kamil Trzcinski committed
26
  - '[ "$USE_DB" != "true" ] || bundle exec rake db:drop db:create db:schema:load db:migrate'
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
# Prepare and merge knapsack tests
Kamil Trzcinski's avatar
Kamil Trzcinski committed
35
.knapsack-state: &knapsack-state
36
  services: []
Kamil Trzcinski's avatar
Kamil Trzcinski committed
37 38 39 40 41 42 43 44
  variables:
    USE_DB: "false"
    USE_BUNDLE_INSTALL: "false"
  cache:
    key: "knapsack"
    paths:
    - knapsack/
  artifacts:
45
    expire_in: 31d
Kamil Trzcinski's avatar
Kamil Trzcinski committed
46
    paths:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
47
    - knapsack/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
48

Kamil Trzcinski's avatar
Kamil Trzcinski committed
49
knapsack:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
50
  <<: *knapsack-state
Kamil Trzcinski's avatar
Kamil Trzcinski committed
51 52 53 54 55 56 57
  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
58
  <<: *knapsack-state
59 60 61 62 63
  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
64 65
  only:
    - master
66

67 68
# Execute all testing suites

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

Kamil Trzcinski's avatar
Kamil Trzcinski committed
74
.rspec-knapsack: &rspec-knapsack
75
  stage: test
76
  <<: *use-db
77
  script:
78 79 80 81
    - 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
82
    - export KNAPSACK_REPORT_PATH=knapsack/rspec_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
83
    - export KNAPSACK_GENERATE_REPORT=true
Kamil Trzcinski's avatar
Kamil Trzcinski committed
84
    - cp knapsack/rspec_report.json ${KNAPSACK_REPORT_PATH}
Stan Hu's avatar
Stan Hu committed
85
    - knapsack rspec "--color --format documentation"
86
  artifacts:
87
    expire_in: 31d
88 89
    paths:
    - knapsack/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
90
    - coverage/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
91

Kamil Trzcinski's avatar
Kamil Trzcinski committed
92
.spinach-knapsack: &spinach-knapsack
Kamil Trzcinski's avatar
Kamil Trzcinski committed
93
  stage: test
94
  <<: *use-db
Kamil Trzcinski's avatar
Kamil Trzcinski committed
95 96 97 98 99 100 101 102
  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}
103
    - 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
104
  artifacts:
105
    expire_in: 31d
Kamil Trzcinski's avatar
Kamil Trzcinski committed
106 107
    paths:
    - knapsack/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
108
    - coverage/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
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 140

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
141

142 143 144
# Execute all testing suites against Ruby 2.1
.ruby-21: &ruby-21
  image: "ruby:2.1"
145
  <<: *use-db
Connor Shea's avatar
Connor Shea committed
146 147
  only:
    - master
148
  cache:
149
    key: "ruby21"
150 151 152
    paths:
      - vendor/apt
      - vendor/ruby
153

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

158
.spinach-knapsack-ruby21: &spinach-knapsack-ruby21
Kamil Trzcinski's avatar
Kamil Trzcinski committed
159
  <<: *spinach-knapsack
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 191 192
  <<: *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
193 194

# Other generic tests
195

196
.ruby-static-analysis: &ruby-static-analysis
197 198 199 200
  variables:
    SIMPLECOV: "false"
    USE_DB: "false"
    USE_BUNDLE_INSTALL: "true"
201

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

208
rubocop: *exec
Rémy Coutable's avatar
Rémy Coutable committed
209
rake haml_lint: *exec
210 211
rake scss_lint: *exec
rake brakeman: *exec
212 213 214 215 216 217
rake flog:
  <<: *exec
  allow_failure: yes
rake flay:
  <<: *exec
  allow_failure: yes
Kamil Trzcinski's avatar
Kamil Trzcinski committed
218
license_finder: *exec
219
rake downtime_check: *exec
220

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

teaspoon:
  stage: test
229
  <<: *use-db
230
  script:
231 232 233
    - curl --silent --location https://deb.nodesource.com/setup_6.x | bash -
    - apt-get install --assume-yes nodejs
    - npm install --global istanbul
234
    - teaspoon
235 236 237 238 239
  artifacts:
    name: coverage-javascript
    expire_in: 31d
    paths:
    - coverage-javascript/default/
240

241 242 243 244 245 246 247
lint-doc:
  stage: test
  image: "phusion/baseimage:latest"
  before_script: []
  script:
    - scripts/lint-doc.sh

248
bundler:audit:
249
  stage: test
250
  <<: *ruby-static-analysis
251
  only:
252
    - master
253
  script:
254
    - "bundle exec bundle-audit check --update --ignore OSVDB-115941"
255

256 257 258 259 260 261 262 263 264 265 266 267 268 269 270
migration paths:
  stage: test
  <<: *use-db
  only:
    - master@gitlab-org/gitlab-ce
  script:
    - git checkout HEAD .
    - git fetch --tags
    - git checkout v8.5.9
    - '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
    - rake db:migrate

271 272 273 274 275 276 277 278 279
coverage:
  stage: post-test
  services: []
  variables:
    USE_DB: "false"
    USE_BUNDLE_INSTALL: "true"
  script:
    - bundle exec scripts/merge-simplecov
  artifacts:
280
    name: coverage
281 282 283 284 285
    expire_in: 31d
    paths:
    - coverage/index.html
    - coverage/assets/

286
# Notify slack in the end
287 288

notify:slack:
289
  stage: post-test
290 291 292
  variables:
    USE_DB: "false"
    USE_BUNDLE_INSTALL: "false"
293
  script:
James Lopez's avatar
James Lopez committed
294
    - ./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>"
295 296 297 298 299
  when: on_failure
  only:
    - master@gitlab-org/gitlab-ce
    - tags@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
300
    - tags@gitlab-org/gitlab-ee
301 302 303 304 305 306

pages:
  before_script: []
  stage: pages
  dependencies:
    - coverage
307
    - teaspoon
308
  script:
309 310
    - mv public/ .public/
    - mkdir public/
311
    - mv coverage public/coverage-ruby
312
    - mv coverage-javascript/default/ public/coverage-javascript/
313 314 315
  artifacts:
    paths:
      - public
316 317
  only:
    - master