.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"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
15 16
  # retry tests only in CI environment
  RSPEC_RETRY_RETRY_COUNT: "3"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
17 18
  RAILS_ENV: "test"
  SIMPLECOV: "true"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
19
  USE_DB: "true"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
20
  USE_BUNDLE_INSTALL: "true"
21

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

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

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

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

Kamil Trzcinski's avatar
Kamil Trzcinski committed
50
knapsack:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
51
  <<: *knapsack-state
Kamil Trzcinski's avatar
Kamil Trzcinski committed
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:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
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

68 69
# Execute all testing suites

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

Kamil Trzcinski's avatar
Kamil Trzcinski committed
85
.spinach-knapsack: &spinach-knapsack
Kamil Trzcinski's avatar
Kamil Trzcinski committed
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}
95
    - 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
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
Kamil Trzcinski's avatar
Kamil Trzcinski committed
131

132
# Execute all testing suites against Ruby 2.2
133

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

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

.spinach-knapsack-ruby22: &spinach-knapsack-ruby22
Kamil Trzcinski's avatar
Kamil Trzcinski committed
148
  <<: *spinach-knapsack
Kamil Trzcinski's avatar
Kamil Trzcinski committed
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
182 183

# Other generic tests
184

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

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
Kamil Trzcinski's avatar
Kamil Trzcinski committed
197
license_finder: *exec
198

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

206
# Notify slack in the end
207 208

notify:slack:
209
  stage: post-test
210
  script:
James Lopez's avatar
James Lopez committed
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