.gitlab-ci.yml 6.39 KB
Newer Older
1
image: "ruby:2.1"
2

3
cache:
4
  key: "ruby21"
5
  paths:
6 7
  - vendor/apt
  - vendor/ruby
8

9 10
variables:
  MYSQL_ALLOW_EMPTY_PASSWORD: "1"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
11 12
  # retry tests only in CI environment
  RSPEC_RETRY_RETRY_COUNT: "3"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
13 14
  RAILS_ENV: "test"
  SIMPLECOV: "true"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
15
  USE_DB: "true"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
16
  USE_BUNDLE_INSTALL: "true"
17
  GIT_DEPTH: "20"
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
Kamil Trzcinski's avatar
Kamil Trzcinski committed
25
  - '[ "$USE_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

32
# Prepare and merge knapsack tests
Kamil Trzcinski's avatar
Kamil Trzcinski committed
33
.knapsack-state: &knapsack-state
34
  services: []
Kamil Trzcinski's avatar
Kamil Trzcinski committed
35 36 37 38 39 40 41 42 43
  variables:
    USE_DB: "false"
    USE_BUNDLE_INSTALL: "false"
  cache:
    key: "knapsack"
    paths:
    - knapsack/
  artifacts:
    paths:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
44
    - knapsack/
Kamil Trzcinski's avatar
Kamil Trzcinski committed
45

Kamil Trzcinski's avatar
Kamil Trzcinski committed
46
knapsack:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
47
  <<: *knapsack-state
Kamil Trzcinski's avatar
Kamil Trzcinski committed
48 49 50 51 52 53 54
  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
55
  <<: *knapsack-state
56 57 58 59 60
  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
61 62
  only:
    - master
63

64 65
# Execute all testing suites

Kamil Trzcinski's avatar
Kamil Trzcinski committed
66
.rspec-knapsack: &rspec-knapsack
67
  stage: test
68 69 70
  services:
    - mysql:latest
    - redis:alpine
71
  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
  stage: test
86 87 88
  services:
    - mysql:latest
    - redis:alpine
Kamil Trzcinski's avatar
Kamil Trzcinski committed
89 90 91 92 93 94 95 96
  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}
97
    - 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
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 132
  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
133

connorshea's avatar
connorshea committed
134 135 136
# Execute all testing suites against Ruby 2.3
.ruby-23: &ruby-23
  image: "ruby:2.3"
137 138 139
  services:
    - mysql:latest
    - redis:alpine
Connor Shea's avatar
Connor Shea committed
140 141
  only:
    - master
142 143 144 145 146
  cache:
    key: "ruby-23"
    paths:
      - vendor/apt
      - vendor/ruby
147

connorshea's avatar
connorshea committed
148
.rspec-knapsack-ruby23: &rspec-knapsack-ruby23
Kamil Trzcinski's avatar
Kamil Trzcinski committed
149
  <<: *rspec-knapsack
connorshea's avatar
connorshea committed
150
  <<: *ruby-23
Kamil Trzcinski's avatar
Kamil Trzcinski committed
151

connorshea's avatar
connorshea committed
152
.spinach-knapsack-ruby23: &spinach-knapsack-ruby23
Kamil Trzcinski's avatar
Kamil Trzcinski committed
153
  <<: *spinach-knapsack
connorshea's avatar
connorshea committed
154
  <<: *ruby-23
155

connorshea's avatar
connorshea committed
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 183 184 185 186
rspec 0 20 ruby23: *rspec-knapsack-ruby23
rspec 1 20 ruby23: *rspec-knapsack-ruby23
rspec 2 20 ruby23: *rspec-knapsack-ruby23
rspec 3 20 ruby23: *rspec-knapsack-ruby23
rspec 4 20 ruby23: *rspec-knapsack-ruby23
rspec 5 20 ruby23: *rspec-knapsack-ruby23
rspec 6 20 ruby23: *rspec-knapsack-ruby23
rspec 7 20 ruby23: *rspec-knapsack-ruby23
rspec 8 20 ruby23: *rspec-knapsack-ruby23
rspec 9 20 ruby23: *rspec-knapsack-ruby23
rspec 10 20 ruby23: *rspec-knapsack-ruby23
rspec 11 20 ruby23: *rspec-knapsack-ruby23
rspec 12 20 ruby23: *rspec-knapsack-ruby23
rspec 13 20 ruby23: *rspec-knapsack-ruby23
rspec 14 20 ruby23: *rspec-knapsack-ruby23
rspec 15 20 ruby23: *rspec-knapsack-ruby23
rspec 16 20 ruby23: *rspec-knapsack-ruby23
rspec 17 20 ruby23: *rspec-knapsack-ruby23
rspec 18 20 ruby23: *rspec-knapsack-ruby23
rspec 19 20 ruby23: *rspec-knapsack-ruby23

spinach 0 10 ruby23: *spinach-knapsack-ruby23
spinach 1 10 ruby23: *spinach-knapsack-ruby23
spinach 2 10 ruby23: *spinach-knapsack-ruby23
spinach 3 10 ruby23: *spinach-knapsack-ruby23
spinach 4 10 ruby23: *spinach-knapsack-ruby23
spinach 5 10 ruby23: *spinach-knapsack-ruby23
spinach 6 10 ruby23: *spinach-knapsack-ruby23
spinach 7 10 ruby23: *spinach-knapsack-ruby23
spinach 8 10 ruby23: *spinach-knapsack-ruby23
spinach 9 10 ruby23: *spinach-knapsack-ruby23
187 188

# Other generic tests
189

190
.exec: &exec
191 192 193 194
  variables:
    SIMPLECOV: "false"
    USE_DB: "false"
    USE_BUNDLE_INSTALL: "true"
195 196
  stage: test
  script:
197
    - bundle exec $CI_BUILD_NAME
198

199 200 201 202 203
rubocop: *exec
rake scss_lint: *exec
rake brakeman: *exec
rake flog: *exec
rake flay: *exec
Kamil Trzcinski's avatar
Kamil Trzcinski committed
204
license_finder: *exec
205

206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
rake db:migrate:reset:
  stage: test
  services:
    - mysql:latest
    - redis:alpine
  script:
    - rake db:migrate:reset

teaspoon:
  stage: test
  services:
    - mysql:latest
    - redis:alpine
  script:
    - teaspoon

222
bundler:audit:
223
  stage: test
224 225 226 227
  variables:
    SIMPLECOV: "false"
    USE_DB: "false"
    USE_BUNDLE_INSTALL: "true"
228
  only:
229
    - master
230
  script:
231
    - "bundle exec bundle-audit check --update --ignore OSVDB-115941"
232

233
# Notify slack in the end
234 235

notify:slack:
236
  stage: post-test
237
  script:
James Lopez's avatar
James Lopez committed
238
    - ./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>"
239 240 241 242 243
  when: on_failure
  only:
    - master@gitlab-org/gitlab-ce
    - tags@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
244
    - tags@gitlab-org/gitlab-ee