# Ruby CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-ruby/ for more details
#
version: 2

default: &default
  docker:
    - image: ruby
  environment:
    # c.f. https://github.com/ffaker/ffaker/issues/277#issuecomment-263519146
    LANG:     en_US.UTF-8
    LANGUAGE: en_US.UTF-8
    LC_ALL:   C.UTF-8

    BUNDLE_PATH: vendor/bundle
    BUNDLE_JOBS: 4

  working_directory: ~/app

restore_repo_cache_option: &restore_repo_cache_option
  key: v1-repo-{{ .Environment.CIRCLE_SHA1 }}

save_repo_cache_option: &save_repo_cache_option
  key: v1-repo-{{ .Environment.CIRCLE_SHA1 }}
  paths:
    - ~/app

restore_bundle_cache_option: &restore_bundle_cache_option
  keys:
    - v3-bundle-{{ .Environment.CIRCLE_JOB }}-{{ checksum "itest5ch.gemspec" }}
    - v3-bundle-{{ .Environment.CIRCLE_JOB }}

save_bundle_cache_option: &save_bundle_cache_option
  key: v3-bundle-{{ .Environment.CIRCLE_JOB }}-{{ checksum "itest5ch.gemspec" }}
  paths:
    - ~/app/vendor/bundle
    - ~/app/Gemfile.lock

rspec_steps: &rspec_steps
  - restore_cache:
      <<: *restore_repo_cache_option
  - restore_cache:
      <<: *restore_bundle_cache_option
  - run: ./.circleci/setup.sh
  - save_cache:
      <<: *save_bundle_cache_option

  - run: bundle exec rspec

build_jobs: &build_jobs
  - checkout_code
  - rspec:2.3:
      requires:
        - checkout_code
  - rspec:2.4:
      requires:
        - checkout_code
  - rspec:2.5:
      requires:
        - checkout_code
  - rubocop:
      requires:
        - checkout_code

jobs:
  checkout_code:
    <<: *default

    steps:
      - checkout

      - save_cache:
          <<: *save_repo_cache_option

  rspec:2.3:
    <<: *default

    docker:
      - image: ruby:2.3

    steps: *rspec_steps

  rspec:2.4:
    <<: *default

    docker:
      - image: ruby:2.4

    steps: *rspec_steps

  rspec:2.5:
    <<: *default

    docker:
      - image: ruby:2.5

    steps: *rspec_steps

  rubocop:
    <<: *default

    steps:
      - restore_cache:
          <<: *restore_repo_cache_option
      - restore_cache:
          <<: *restore_bundle_cache_option
      - run: ./.circleci/setup.sh
      - save_cache:
          <<: *save_bundle_cache_option

      - run: bundle exec rubocop

workflows:
  version: 2

  build:
    jobs: *build_jobs

  weekly_build:
    triggers:
      - schedule:
          cron: "00 19 * * 5" # JST 4:00 (Sat)
          filters:
            branches:
              only: master
    jobs: *build_jobs