.gitlab-ci.yml 5.95 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
  GIT_DEPTH: "20"
22

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

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

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

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

Kamil Trzcinski's avatar
Kamil Trzcinski committed
51
knapsack:
Kamil Trzcinski's avatar
Kamil Trzcinski committed
52
  <<: *knapsack-state
Kamil Trzcinski's avatar
Kamil Trzcinski committed
53 54 55 56 57 58 59
  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
60
  <<: *knapsack-state
61 62 63 64 65
  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
66 67
  only:
    - master
68

69 70
# Execute all testing suites

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

Kamil Trzcinski's avatar
Kamil Trzcinski committed
86
.spinach-knapsack: &spinach-knapsack
Kamil Trzcinski's avatar
Kamil Trzcinski committed
87 88 89 90 91 92 93 94 95
  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}
96
    - 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
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
  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

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

connorshea's avatar
connorshea committed
144
.rspec-knapsack-ruby23: &rspec-knapsack-ruby23
Kamil Trzcinski's avatar
Kamil Trzcinski committed
145
  <<: *rspec-knapsack
connorshea's avatar
connorshea committed
146
  <<: *ruby-23
Kamil Trzcinski's avatar
Kamil Trzcinski committed
147

connorshea's avatar
connorshea committed
148
.spinach-knapsack-ruby23: &spinach-knapsack-ruby23
Kamil Trzcinski's avatar
Kamil Trzcinski committed
149
  <<: *spinach-knapsack
connorshea's avatar
connorshea committed
150
  <<: *ruby-23
Kamil Trzcinski's avatar
Kamil Trzcinski committed
151
  
connorshea's avatar
connorshea committed
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
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
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