.gitlab-ci.yml 8.45 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
25
  - '[ "$SETUP_DB" != "true" ] || bundle exec rake db:drop db:create db:schema:load db:migrate'
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

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

Kamil Trzcinski's avatar
Kamil Trzcinski committed
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:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
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
Kamil Trzcinski's avatar
Kamil Trzcinski committed
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"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
85
  artifacts:
86
    expire_in: 31d
Kamil Trzcinski's avatar
Kamil Trzcinski committed
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}
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
Connor Shea's avatar
Connor Shea committed
147
  cache:
148
    key: "ruby21"
Connor Shea's avatar
Connor Shea committed
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
Kamil Trzcinski's avatar
Kamil Trzcinski committed
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

Kamil Trzcinski's avatar
Kamil Trzcinski committed
200
.exec: &exec
201
  <<: *ruby-static-analysis
202 203
  stage: test
  script:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
204
    - bundle exec $CI_BUILD_NAME
205

Kamil Trzcinski's avatar
Kamil Trzcinski committed
206
rubocop: *exec
Rémy Coutable's avatar
Rémy Coutable committed
207
rake haml_lint: *exec
Kamil Trzcinski's avatar
Kamil Trzcinski committed
208 209
rake scss_lint: *exec
rake brakeman: *exec
Stan Hu's avatar
Stan Hu committed
210 211 212
rake flay:
  <<: *exec
  allow_failure: yes
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
  script:
    - rake db:migrate:reset

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

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

253 254 255 256 257 258 259
lint-doc:
  stage: test
  image: "phusion/baseimage:latest"
  before_script: []
  script:
    - scripts/lint-doc.sh

Kamil Trzcinski's avatar
Kamil Trzcinski committed
260
bundler:audit:
261
  stage: test
262
  <<: *ruby-static-analysis
263
  only:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
264
    - master
265
  script:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
266
    - "bundle exec bundle-audit check --update --ignore OSVDB-115941"
267

268 269 270 271 272 273 274 275 276 277 278 279 280 281 282
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

283 284 285 286
coverage:
  stage: post-test
  services: []
  variables:
287
    SETUP_DB: "false"
288 289 290 291
    USE_BUNDLE_INSTALL: "true"
  script:
    - bundle exec scripts/merge-simplecov
  artifacts:
292
    name: coverage
293 294 295 296 297
    expire_in: 31d
    paths:
    - coverage/index.html
    - coverage/assets/

Kamil Trzcinski's avatar
Kamil Trzcinski committed
298
# Notify slack in the end
299 300

notify:slack:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
301
  stage: post-test
302
  variables:
303
    SETUP_DB: "false"
304
    USE_BUNDLE_INSTALL: "false"
305
  script:
James Lopez's avatar
James Lopez committed
306
    - ./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>"
307 308 309 310 311
  when: on_failure
  only:
    - master@gitlab-org/gitlab-ce
    - tags@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
312
    - tags@gitlab-org/gitlab-ee
313 314 315 316 317 318

pages:
  before_script: []
  stage: pages
  dependencies:
    - coverage
319
    - teaspoon
320
  script:
321 322
    - mv public/ .public/
    - mkdir public/
323
    - mv coverage public/coverage-ruby
324
    - mv coverage-javascript/default/ public/coverage-javascript/
325 326 327
  artifacts:
    paths:
      - public
328 329
  only:
    - master