.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
  paths:
10 11
  - vendor/apt
  - vendor/ruby
12

13 14
variables:
  MYSQL_ALLOW_EMPTY_PASSWORD: "1"
K
Kamil Trzcinski 已提交
15 16
  # retry tests only in CI environment
  RSPEC_RETRY_RETRY_COUNT: "3"
K
Kamil Trzcinski 已提交
17 18
  RAILS_ENV: "test"
  SIMPLECOV: "true"
K
Kamil Trzcinski 已提交
19
  USE_DB: "true"
K
Kamil Trzcinski 已提交
20
  USE_BUNDLE_INSTALL: "true"
21

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

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

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

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

K
Kamil Trzcinski 已提交
50
knapsack:
K
Kamil Trzcinski 已提交
51
  <<: *knapsack-state
K
Kamil Trzcinski 已提交
52 53 54 55 56 57 58
  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 已提交
59
  <<: *knapsack-state
60 61 62 63 64
  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
65 66
  only:
    - master
67

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

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

K
Kamil Trzcinski 已提交
85
.spinach-knapsack: &spinach-knapsack
K
Kamil Trzcinski 已提交
86 87 88 89 90 91 92 93 94
  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}
K
Kamil Trzcinski 已提交
95
    - knapsack spinach "-r rerun" || retry '[ ! -e tmp/spinach-rerun.txt ] || bundle exec spinach -r rerun $(cat tmp/spinach-rerun.txt)'
K
Kamil Trzcinski 已提交
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
  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 已提交
131

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

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

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

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

# Other generic tests
184

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

K
Kamil Trzcinski 已提交
190 191 192 193 194 195 196
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 已提交
197
license_finder: *exec
198

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

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

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