.gitlab-ci.yml 5.9 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"
K
Kamil Trzcinski 已提交
14 15
  # retry tests only in CI environment
  RSPEC_RETRY_RETRY_COUNT: "3"
K
Kamil Trzcinski 已提交
16 17
  RAILS_ENV: "test"
  SIMPLECOV: "true"
K
Kamil Trzcinski 已提交
18
  USE_DB: "true"
K
Kamil Trzcinski 已提交
19
  USE_BUNDLE_INSTALL: "true"
20

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

K
Kamil Trzcinski 已提交
29
stages:
K
Kamil Trzcinski 已提交
30
- prepare
K
Kamil Trzcinski 已提交
31
- test
32
- post-test
33

K
Kamil Trzcinski 已提交
34
# Prepare and merge knapsack tests
K
Kamil Trzcinski 已提交
35

K
Kamil Trzcinski 已提交
36
.knapsack-state: &knapsack-state
37
  services: []
K
Kamil Trzcinski 已提交
38 39 40 41 42 43 44 45 46
  variables:
    USE_DB: "false"
    USE_BUNDLE_INSTALL: "false"
  cache:
    key: "knapsack"
    paths:
    - knapsack/
  artifacts:
    paths:
K
Kamil Trzcinski 已提交
47
    - knapsack/
K
Kamil Trzcinski 已提交
48

K
Kamil Trzcinski 已提交
49
knapsack:
K
Kamil Trzcinski 已提交
50
  <<: *knapsack-state
K
Kamil Trzcinski 已提交
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:
K
Kamil Trzcinski 已提交
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

K
Kamil Trzcinski 已提交
67 68
# Execute all testing suites

K
Kamil Trzcinski 已提交
69
.rspec-knapsack: &rspec-knapsack
70 71
  stage: test
  script:
K
Kamil Trzcinski 已提交
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]}
K
Kamil Trzcinski 已提交
76
    - export KNAPSACK_REPORT_PATH=knapsack/rspec_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
K
Kamil Trzcinski 已提交
77
    - export KNAPSACK_GENERATE_REPORT=true
K
Kamil Trzcinski 已提交
78 79
    - cp knapsack/rspec_report.json ${KNAPSACK_REPORT_PATH}
    - knapsack rspec
K
Kamil Trzcinski 已提交
80 81 82
  artifacts:
    paths:
    - knapsack/
K
Kamil Trzcinski 已提交
83

K
Kamil Trzcinski 已提交
84
.spinach-knapsack: &spinach-knapsack
K
Kamil Trzcinski 已提交
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" || retry '[ ! -e tmp/spinach-rerun.txt ] || bin/spinach -r rerun $(cat tmp/spinach-rerun.txt)'
K
Kamil Trzcinski 已提交
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
  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
K
Kamil Trzcinski 已提交
130

K
Kamil Trzcinski 已提交
131
# Execute all testing suites against Ruby 2.2
132

K
Kamil Trzcinski 已提交
133
.ruby-22: &ruby-22
134
  image: "ruby:2.2"
135 136
  only:
    - master
137 138 139 140 141
  cache:
    key: "ruby22"
    paths:
    - vendor

K
Kamil Trzcinski 已提交
142 143 144 145 146
.rspec-knapsack-ruby22: &rspec-knapsack-ruby22
  <<: *rspec-knapsack
  <<: *ruby-22

.spinach-knapsack-ruby22: &spinach-knapsack-ruby22
K
Kamil Trzcinski 已提交
147
  <<: *spinach-knapsack
K
Kamil Trzcinski 已提交
148 149 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
  <<: *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
K
Kamil Trzcinski 已提交
181 182

# Other generic tests
183

K
Kamil Trzcinski 已提交
184
.exec: &exec
185 186
  stage: test
  script:
K
Kamil Trzcinski 已提交
187
    - bundle exec $CI_BUILD_NAME
188

K
Kamil Trzcinski 已提交
189 190 191 192 193 194 195
teaspoon: *exec
rubocop: *exec
rake scss_lint: *exec
rake brakeman: *exec
rake flog: *exec
rake flay: *exec
rake db:migrate:reset: *exec
K
Kamil Trzcinski 已提交
196
license_finder: *exec
197

K
Kamil Trzcinski 已提交
198
bundler:audit:
199 200
  stage: test
  only:
K
Kamil Trzcinski 已提交
201
    - master
202
  script:
K
Kamil Trzcinski 已提交
203
    - "bundle exec bundle-audit check --update --ignore OSVDB-115941"
204

K
Kamil Trzcinski 已提交
205
# Notify slack in the end
206 207

notify:slack:
K
Kamil Trzcinski 已提交
208
  stage: post-test
209
  script:
J
James Lopez 已提交
210
    - ./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>"
211 212 213 214 215
  when: on_failure
  only:
    - master@gitlab-org/gitlab-ce
    - tags@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
216
    - tags@gitlab-org/gitlab-ee