image: "ruby:2.1"

services:
  - mysql:latest
  - redis:latest

cache:
  key: "ruby21"
  paths:
  - vendor

variables:
  MYSQL_ALLOW_EMPTY_PASSWORD: "1"
  # retry tests only in CI environment
  RSPEC_RETRY_RETRY_COUNT: "3"

before_script:
  - source ./scripts/prepare_build.sh
  - ruby -v
  - which ruby
  - retry gem install bundler --no-ri --no-rdoc
  - cp config/gitlab.yml.example config/gitlab.yml
  - touch log/application.log
  - touch log/test.log
  - retry bundle install --without postgres production --jobs $(nproc) "${FLAGS[@]}"
  - RAILS_ENV=test bundle exec rake db:drop db:create db:schema:load db:migrate

stages:
- test
- notifications

spec:feature:
  stage: test
  script:
    - RAILS_ENV=test bundle exec rake assets:precompile 2>/dev/null
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:feature

spec:api:
  stage: test
  script:
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:api

spec:models:
  stage: test
  script:
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:models

spec:lib:
  stage: test
  script:
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:lib

spec:services:
  stage: test
  script:
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:services

spec:other:
  stage: test
  script:
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:other

spinach:project:half:
  stage: test
  script:
    - RAILS_ENV=test bundle exec rake assets:precompile 2>/dev/null
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spinach:project:half

spinach:project:rest:
  stage: test
  script:
    - RAILS_ENV=test bundle exec rake assets:precompile 2>/dev/null
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spinach:project:rest

spinach:other:
  stage: test
  script:
    - RAILS_ENV=test bundle exec rake assets:precompile 2>/dev/null
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spinach:other

teaspoon:
  stage: test
  script:
    - RAILS_ENV=test bundle exec teaspoon

rubocop:
  stage: test
  script:
    - bundle exec rubocop

scss-lint:
  stage: test
  script:
    - bundle exec rake scss_lint

brakeman:
  stage: test
  script:
    - bundle exec rake brakeman

flog:
  stage: test
  script:
    - bundle exec rake flog

flay:
  stage: test
  script:
    - bundle exec rake flay

bundler:audit:
  stage: test
  only:
    - master
  script:
    - "bundle exec bundle-audit check --update --ignore OSVDB-115941"

# Ruby 2.2 jobs

spec:feature:ruby22:
  stage: test
  image: ruby:2.2
  only:
    - master
  script:
    - RAILS_ENV=test bundle exec rake assets:precompile 2>/dev/null
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:feature
  cache:
    key: "ruby22"
    paths:
    - vendor

spec:api:ruby22:
  stage: test
  image: ruby:2.2
  only:
  - master
  script:
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:api
  cache:
    key: "ruby22"
    paths:
    - vendor

spec:models:ruby22:
  stage: test
  image: ruby:2.2
  only:
  - master
  script:
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:models
  cache:
    key: "ruby22"
    paths:
    - vendor

spec:lib:ruby22:
  stage: test
  image: ruby:2.2
  only:
  - master
  script:
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:lib
  cache:
    key: "ruby22"
    paths:
    - vendor

spec:services:ruby22:
  stage: test
  image: ruby:2.2
  only:
  - master
  script:
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:services
  cache:
    key: "ruby22"
    paths:
    - vendor

spec:other:ruby22:
  stage: test
  image: ruby:2.2
  only:
  - master
  script:
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:other
  cache:
    key: "ruby22"
    paths:
    - vendor

spinach:project:half:ruby22:
  stage: test
  image: ruby:2.2
  only:
  - master
  script:
    - RAILS_ENV=test bundle exec rake assets:precompile 2>/dev/null
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spinach:project:half
  cache:
    key: "ruby22"
    paths:
    - vendor

spinach:project:rest:ruby22:
  stage: test
  image: ruby:2.2
  only:
  - master
  script:
    - RAILS_ENV=test bundle exec rake assets:precompile 2>/dev/null
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spinach:project:rest
  cache:
    key: "ruby22"
    paths:
    - vendor

spinach:other:ruby22:
  stage: test
  image: ruby:2.2
  only:
  - master
  script:
    - RAILS_ENV=test bundle exec rake assets:precompile 2>/dev/null
    - RAILS_ENV=test SIMPLECOV=true bundle exec rake spinach:other
  cache:
    key: "ruby22"
    paths:
    - vendor

notify:slack:
  stage: notifications
  script:
    - ./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>"
  when: on_failure
  only:
    - master@gitlab-org/gitlab-ce
    - tags@gitlab-org/gitlab-ce
    - master@gitlab-org/gitlab-ee
    - tags@gitlab-org/gitlab-ee
