config.yml 3.14 KB
version: 2.1

executors:
  ruby:
    parameters:
      version:
        description: "Ruby version number"
        default: "3.1"
        type: string
    docker:
      - image: ruby:<< parameters.version >>

commands:
  bundle_install:
    description: Install Ruby dependencies with Bundler
    parameters:
      version:
        description: "Ruby version number"
        default: "3.1"
        type: string
    steps:
      - restore_cache:
          keys:
            - bundle-v1-{{ arch }}-<< parameters.version >>
      - run:
          name: Install Ruby Dependencies
          command: |
            gem install bundler --conservative --no-document || gem install bundler -v '< 2' --no-document
            bundle config --local path vendor/bundle
            bundle check || (bundle install --jobs=4 --retry=3 && bundle clean)
      - save_cache:
          paths:
            - ./vendor/bundle
          key: bundle-v1-{{ arch }}-<< parameters.version >>-{{ checksum "Gemfile.lock" }}
  update_ssh_client:
    description: Install recent SSH client for compatibility with GitHub
    steps:
      - run:
          name: Install OpenSSH 8.1p1 if necessary
          command: |
            if $(ssh -V 2>&1 | grep -q -v OpenSSH_8); then
              apt-get update
              apt-get install -y libssl-dev
              mkdir ~/tempdownload
              cd ~/tempdownload
              wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.1p1.tar.gz
              tar zxvf openssh-8.1p1.tar.gz
              cd openssh-8.1p1 && ./configure --prefix=/usr && make ssh && make install
            fi

jobs:
  danger:
    executor: ruby
    steps:
      - checkout
      - bundle_install
      - run: bundle exec danger

  rubocop:
    executor: ruby
    steps:
      - checkout
      - bundle_install
      - run: bundle exec rubocop

  spec:
    parameters:
      version:
        description: "Ruby version number"
        default: "3.1"
        type: string
    executor:
      name: ruby
      version: << parameters.version >>
    steps:
      - update_ssh_client
      - checkout
      - bundle_install:
          version: << parameters.version >>
      - run: bundle exec rake spec

workflows:
  version: 2
  commit-workflow:
    jobs:
      - danger
      - rubocop
      - spec:
          matrix:
            parameters:
              version:
                [
                  "2.0",
                  "2.1",
                  "2.2",
                  "2.3",
                  "2.4",
                  "2.5",
                  "2.6",
                  "2.7",
                  "3.0",
                  "3.1",
                ]
  cron-workflow:
    jobs:
      - rubocop
      - spec:
          matrix:
            parameters:
              version:
                [
                  "2.0",
                  "2.1",
                  "2.2",
                  "2.3",
                  "2.4",
                  "2.5",
                  "2.6",
                  "2.7",
                  "3.0",
                  "3.1",
                ]
    triggers:
      - schedule:
          cron: "0 13 * * 6"
          filters:
            branches:
              only:
                - master