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

.gitlab-ci.yml 7.48 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"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
18
  PHANTOMJS_DEB: "phantomjs_2.1.1+dfsg-2_amd64.deb"
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 85
    - cp knapsack/rspec_report.json ${KNAPSACK_REPORT_PATH}
    - knapsack rspec
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 209 210 211 212
rubocop: *exec
rake scss_lint: *exec
rake brakeman: *exec
rake flog: *exec
rake flay: *exec
Kamil Trzcinski's avatar
Kamil Trzcinski committed
213
license_finder: *exec
214
rake downtime_check: *exec
215

216 217
rake db:migrate:reset:
  stage: test
218
  <<: *use-db
219 220 221 222 223
  script:
    - rake db:migrate:reset

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

236 237 238 239 240 241 242
lint-doc:
  stage: test
  image: "phusion/baseimage:latest"
  before_script: []
  script:
    - scripts/lint-doc.sh

243
bundler:audit:
244
  stage: test
245
  <<: *ruby-static-analysis
246
  only:
247
    - master
248
  script:
249
    - "bundle exec bundle-audit check --update --ignore OSVDB-115941"
250

251 252 253 254 255 256 257 258 259
coverage:
  stage: post-test
  services: []
  variables:
    USE_DB: "false"
    USE_BUNDLE_INSTALL: "true"
  script:
    - bundle exec scripts/merge-simplecov
  artifacts:
260
    name: coverage
261 262 263 264 265 266
    expire_in: 31d
    paths:
    - coverage/index.html
    - coverage/assets/


267
# Notify slack in the end
268 269

notify:slack:
270
  stage: post-test
271 272 273
  variables:
    USE_DB: "false"
    USE_BUNDLE_INSTALL: "false"
274
  script:
James Lopez's avatar
James Lopez committed
275
    - ./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>"
276 277 278 279 280
  when: on_failure
  only:
    - master@gitlab-org/gitlab-ce
    - tags@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
281
    - tags@gitlab-org/gitlab-ee
282 283 284 285 286 287

pages:
  before_script: []
  stage: pages
  dependencies:
    - coverage
288
    - teaspoon
289
  script:
290 291
    - mv public/ .public/
    - mkdir public/
292
    - mv coverage public/coverage-ruby
293
    - mv coverage-javascript/default/ public/coverage-javascript/
294 295 296
  artifacts:
    paths:
      - public
297 298
  only:
    - master