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

.gitlab-ci.yml 5.91 KB
Newer Older
1
image: "ruby:2.1"
2 3 4

services:
  - mysql:latest
5
  - redis:alpine
6

7
cache:
8
  key: "ruby21"
9 10 11
  paths:
  - vendor

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

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

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

34
# Prepare and merge knapsack tests
Kamil Trzcinski's avatar
Kamil Trzcinski committed
35

Kamil Trzcinski's avatar
Kamil Trzcinski committed
36
.knapsack-state: &knapsack-state
37
  services: []
Kamil Trzcinski's avatar
Kamil Trzcinski committed
38 39 40 41 42 43 44 45 46
  variables:
    USE_DB: "false"
    USE_BUNDLE_INSTALL: "false"
  cache:
    key: "knapsack"
    paths:
    - knapsack/
  artifacts:
    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

Kamil Trzcinski's avatar
Kamil Trzcinski committed
69
.rspec-knapsack: &rspec-knapsack
70 71
  stage: test
  script:
72 73 74 75
    - 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
76
    - export KNAPSACK_REPORT_PATH=knapsack/rspec_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
77
    - export KNAPSACK_GENERATE_REPORT=true
Kamil Trzcinski's avatar
Kamil Trzcinski committed
78 79
    - cp knapsack/rspec_report.json ${KNAPSACK_REPORT_PATH}
    - knapsack rspec
80 81 82
  artifacts:
    paths:
    - knapsack/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
83

Kamil Trzcinski's avatar
Kamil Trzcinski committed
84
.spinach-knapsack: &spinach-knapsack
Kamil Trzcinski's avatar
Kamil Trzcinski committed
85 86 87 88 89 90 91 92 93
  stage: test
  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}
94
    - knapsack spinach "-r rerun"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
    # retry failed tests 3 times
    - retry '[ ! -e tmp/spinach-rerun.txt ] || bin/spinach -r rerun $(cat tmp/spinach-rerun.txt)'
  artifacts:
    paths:
    - knapsack/

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
132

133
# Execute all testing suites against Ruby 2.2
134

Kamil Trzcinski's avatar
Kamil Trzcinski committed
135
.ruby-22: &ruby-22
136
  image: "ruby:2.2"
137 138
  only:
    - master
139 140 141 142 143
  cache:
    key: "ruby22"
    paths:
    - vendor

Kamil Trzcinski's avatar
Kamil Trzcinski committed
144 145 146 147 148
.rspec-knapsack-ruby22: &rspec-knapsack-ruby22
  <<: *rspec-knapsack
  <<: *ruby-22

.spinach-knapsack-ruby22: &spinach-knapsack-ruby22
Kamil Trzcinski's avatar
Kamil Trzcinski committed
149
  <<: *spinach-knapsack
Kamil Trzcinski's avatar
Kamil Trzcinski committed
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 180 181 182
  <<: *ruby-22
  
rspec 0 20 ruby22: *rspec-knapsack-ruby22
rspec 1 20 ruby22: *rspec-knapsack-ruby22
rspec 2 20 ruby22: *rspec-knapsack-ruby22
rspec 3 20 ruby22: *rspec-knapsack-ruby22
rspec 4 20 ruby22: *rspec-knapsack-ruby22
rspec 5 20 ruby22: *rspec-knapsack-ruby22
rspec 6 20 ruby22: *rspec-knapsack-ruby22
rspec 7 20 ruby22: *rspec-knapsack-ruby22
rspec 8 20 ruby22: *rspec-knapsack-ruby22
rspec 9 20 ruby22: *rspec-knapsack-ruby22
rspec 10 20 ruby22: *rspec-knapsack-ruby22
rspec 11 20 ruby22: *rspec-knapsack-ruby22
rspec 12 20 ruby22: *rspec-knapsack-ruby22
rspec 13 20 ruby22: *rspec-knapsack-ruby22
rspec 14 20 ruby22: *rspec-knapsack-ruby22
rspec 15 20 ruby22: *rspec-knapsack-ruby22
rspec 16 20 ruby22: *rspec-knapsack-ruby22
rspec 17 20 ruby22: *rspec-knapsack-ruby22
rspec 18 20 ruby22: *rspec-knapsack-ruby22
rspec 19 20 ruby22: *rspec-knapsack-ruby22

spinach 0 10 ruby22: *spinach-knapsack-ruby22
spinach 1 10 ruby22: *spinach-knapsack-ruby22
spinach 2 10 ruby22: *spinach-knapsack-ruby22
spinach 3 10 ruby22: *spinach-knapsack-ruby22
spinach 4 10 ruby22: *spinach-knapsack-ruby22
spinach 5 10 ruby22: *spinach-knapsack-ruby22
spinach 6 10 ruby22: *spinach-knapsack-ruby22
spinach 7 10 ruby22: *spinach-knapsack-ruby22
spinach 8 10 ruby22: *spinach-knapsack-ruby22
spinach 9 10 ruby22: *spinach-knapsack-ruby22
183 184

# Other generic tests
185

186
.exec: &exec
187 188
  stage: test
  script:
189
    - bundle exec $CI_BUILD_NAME
190

191 192 193 194 195 196 197
teaspoon: *exec
rubocop: *exec
rake scss_lint: *exec
rake brakeman: *exec
rake flog: *exec
rake flay: *exec
rake db:migrate:reset: *exec
Kamil Trzcinski's avatar
Kamil Trzcinski committed
198
license_finder: *exec
199

200
bundler:audit:
201 202
  stage: test
  only:
203
    - master
204
  script:
205
    - "bundle exec bundle-audit check --update --ignore OSVDB-115941"
206

207
# Notify slack in the end
208 209

notify:slack:
210
  stage: post-test
211
  script:
James Lopez's avatar
James Lopez committed
212
    - ./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>"
213 214 215 216 217
  when: on_failure
  only:
    - master@gitlab-org/gitlab-ce
    - tags@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
218
    - tags@gitlab-org/gitlab-ee