version: 2.1 orbs: gem: doximity/gem-publisher@0 executors: # used for building the gem ruby-latest: resource_class: small docker: - image: cimg/ruby:3.1 environment: BUNDLE_VERSION: '~> 2.3.4' # used for testing the gem: ruby_2_7: resource_class: small docker: - image: cimg/ruby:2.7 environment: BUNDLE_VERSION: '~> 2.3.4' - image: docker.elastic.co/elasticsearch/elasticsearch:7.17.3 environment: - 'ES_JAVA_OPTS=-Xms512m -Xmx512m' - discovery.type=single-node - xpack.security.enabled=false ruby_3_0: resource_class: small docker: - image: cimg/ruby:3.0 environment: BUNDLE_VERSION: '~> 2.3.4' - image: docker.elastic.co/elasticsearch/elasticsearch:7.17.3 environment: - 'ES_JAVA_OPTS=-Xms512m -Xmx512m' - discovery.type=single-node - xpack.security.enabled=false ruby_3_1: resource_class: small docker: - image: cimg/ruby:3.1 environment: BUNDLE_VERSION: '~> 2.3.4' - image: docker.elastic.co/elasticsearch/elasticsearch:7.17.3 environment: - 'ES_JAVA_OPTS=-Xms512m -Xmx512m' - discovery.type=single-node - xpack.security.enabled=false # yaml anchor filters master_only: &master_only filters: branches: only: master tags: ignore: /.*/ pr_only: &pr_only filters: branches: ignore: master tags: ignore: /.*/ version_tags_only: &version_tags_only filters: branches: ignore: /.*/ tags: only: /^v.*/ jobs: build_2_7: executor: ruby_2_7 steps: - checkout - run: name: Install Bundler specific version command: | gem install bundler --version "${BUNDLE_VERSION}" --force - restore_cache: keys: - v3-bundle-ruby_2_7-{{ checksum "Gemfile.lock" }} - run: name: Install Ruby Dependencies command: bundle check --path=vendor/bundle || bundle install --local --frozen --path=vendor/bundle --jobs=4 --retry=3 - save_cache: key: v3-bundle-ruby_2_7-{{ checksum "Gemfile.lock" }} paths: - vendor/bundle - run: name: Wait for ElasticSearch command: dockerize -wait http://127.0.0.1:9200 -timeout 1m - run: name: Run Tests command: bundle exec rspec - persist_to_workspace: root: . paths: - vendor/bundle build_3_0: executor: ruby_3_0 steps: - checkout - run: name: Install Bundler specific version command: | gem install bundler --version "${BUNDLE_VERSION}" --force - restore_cache: keys: - v3-bundle-ruby_3_0-{{ checksum "Gemfile.lock" }} - run: name: Install Ruby Dependencies command: bundle check --path=vendor/bundle || bundle install --local --frozen --path=vendor/bundle --jobs=4 --retry=3 - save_cache: key: v3-bundle-ruby_3_0-{{ checksum "Gemfile.lock" }} paths: - vendor/bundle - run: name: Wait for ElasticSearch command: dockerize -wait http://127.0.0.1:9200 -timeout 1m - run: name: Run Tests command: bundle exec rspec - persist_to_workspace: root: . paths: - vendor/bundle build_3_1: executor: ruby_3_1 steps: - checkout - run: name: Install Bundler specific version command: | gem install bundler --version "${BUNDLE_VERSION}" --force - restore_cache: keys: - v3-bundle-ruby_3_1-{{ checksum "Gemfile.lock" }} - run: name: Install Ruby Dependencies command: bundle check --path=vendor/bundle || bundle install --local --frozen --path=vendor/bundle --jobs=4 --retry=3 - save_cache: key: v3-bundle-ruby_3_1-{{ checksum "Gemfile.lock" }} paths: - vendor/bundle - run: name: Wait for ElasticSearch command: dockerize -wait http://127.0.0.1:9200 -timeout 1m - run: name: Run Tests command: bundle exec rspec - persist_to_workspace: root: . paths: - vendor/bundle workflows: version: 2 trunk: jobs: - build_2_7: <<: *master_only - build_3_0: <<: *master_only - build_3_1: <<: *master_only - gem/build: <<: *master_only executor: ruby-latest name: gem-build requires: - build_3_1 pull-requests: jobs: - build_2_7: <<: *pr_only - build_3_0: <<: *pr_only - build_3_1: <<: *pr_only - gem/build: <<: *pr_only executor: ruby-latest name: gem-build requires: - build_3_1 - pre-release-approval: <<: *pr_only type: approval requires: - gem-build - gem/publish: <<: *pr_only name: gem-publish to_rubygems: true pre_release: true requires: - pre-release-approval context: artifact_publishing final-release: jobs: - build_2_7: <<: *version_tags_only - build_3_0: <<: *version_tags_only - build_3_1: <<: *version_tags_only - gem/build: <<: *version_tags_only executor: ruby-latest name: gem-build requires: - build_3_1 - gem/publish: <<: *version_tags_only name: gem-publish to_rubygems: true pre_release: false requires: - gem-build context: artifact_publishing