version: 2.1

orbs:

pushover: masutaka/pushover@2

executors:

default:
  parameters:
    ruby_version:
      type: enum
      enum: ['3.0', '3.1', '3.2', '3.3']
  docker:
    - image: cimg/ruby:<< parameters.ruby_version >>
  working_directory: ~/repo

commands:

setup_requirements:
  steps:
    - run:
        name: Set timezone to Asia/Tokyo
        command: sudo cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
restore_bundle_cache:
  parameters:
    ruby_version:
      type: enum
      enum: ['3.0', '3.1', '3.2', '3.3']
  steps:
    - restore_cache:
        name: Restore bundle cache
        keys:
          - gems-ruby<< parameters.ruby_version >>-{{ .Environment.COMMON_CACHE_KEY }}-{{ checksum "Gemfile.lock" }}
          - gems-ruby<< parameters.ruby_version >>-{{ .Environment.COMMON_CACHE_KEY }}-
save_bundle_cache:
  parameters:
    ruby_version:
      type: enum
      enum: ['3.0', '3.1', '3.2', '3.3']
  steps:
    - save_cache:
        name: Save bundle cache
        key: gems-ruby<< parameters.ruby_version >>-{{ .Environment.COMMON_CACHE_KEY }}-{{ checksum "Gemfile.lock" }}
        paths:
          - ~/repo/vendor/bundle

jobs:

build:
  parameters:
    ruby_version:
      type: enum
      enum: ['3.0', '3.1', '3.2', '3.3']
  executor:
    name: default
    ruby_version: << parameters.ruby_version >>
  steps:
    - setup_requirements
    - checkout
    - restore_bundle_cache:
        ruby_version: << parameters.ruby_version >>
    - run:
        name: bundle install
        command: |
          bundle config set --local path vendor/bundle
          bundle check || bundle install --jobs=4 --retry=3
          bundle clean
    - save_bundle_cache:
        ruby_version: << parameters.ruby_version >>
    - run: bundle exec rubocop
    - run: bundle exec rspec
    - pushover/notify-on-failure
continuous_bundle_update:
  executor:
    name: default
    ruby_version: '3.3'
  steps:
    - setup_requirements
    - checkout
    - restore_bundle_cache:
        ruby_version: '3.3'
    - run:
        name: Install edge circleci-bundle-update-pr
        command: |
          gem install -N specific_install
          gem specific_install https://github.com/masutaka/circleci-bundle-update-pr.git
    - deploy:
        name: Run circleci-bundle-update-pr
        command: circleci-bundle-update-pr CircleCI [email protected] $CIRCLE_BRANCH -d
    - pushover/notify-on-failure

workflows:

version: 2
ordinary:
  jobs:
    - build:
        name: ruby-3.0
        ruby_version: '3.0'
    - build:
        name: ruby-3.1
        ruby_version: '3.1'
    - build:
        name: ruby-3.2
        ruby_version: '3.2'
    - build:
        name: ruby-3.3
        ruby_version: '3.3'
nightly:
  triggers:
    - schedule:
        cron: "00 10 1 * *"
        filters:
          branches:
            only: main
  jobs:
    - continuous_bundle_update