From 70362607cea14202a25b68359afcba461bf38e86 Mon Sep 17 00:00:00 2001 From: Sai Srinivasan Date: Sun, 23 Jun 2024 10:50:28 -0700 Subject: [PATCH] Introduce matrix for unit tests. reduce test matrix remove mongoid-head gemfile as it is no longer used reduce matrix entry to multi dimension matrix test include for mongoid 9 exclude incompatible versions remove compatible configurations remove minor version specification to reduce number of combinations reduce the number of parallel jobs and incorporate caching remove caching add caching create single entry add matrix with single entry add ruby 3.0 and mongoid 8 complete string add exclusion rules add more exclusion rules correct gem file name and add more exclusion rules add more exclusion rules for mongoid_3 add exlcusion rules add ruby 2.7 and mongoid 4 add more exclusion rules for ruby 3.7 get rid of mongodb 3.6 add ruby 2.7 and mongoid 3 and 4 to exlcusion list add ruby 2.7 and mongoid 5 exclude ruby 2.6 and mongoid 3 and allow ruby 2.6 and mongoid 7 to run add matrix for unit tests modify changelog --- .github/workflows/test.yml | 101 +++++++++++++++------------------- CHANGELOG.md | 1 + gemfiles/mongoid_head.gemfile | 19 ------- 3 files changed, 44 insertions(+), 77 deletions(-) delete mode 100644 gemfiles/mongoid_head.gemfile diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 638a561..52c1fef 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,79 +5,64 @@ on: [push, pull_request] jobs: build: name: >- - Mongoid Test with: - Ruby ${{ matrix.entry.ruby }} - MongoDB ${{ matrix.entry.mongodb }} - Gemfile ${{ matrix.entry.gemfile }}) + Mongoid Test with: - Ruby ${{ matrix.ruby }} - MongoDB ${{ matrix.mongodb }} - Gemfile ${{ matrix.gemfile }}) env: CI: true TESTOPTS: "-v" - BUNDLE_GEMFILE: gemfiles/${{ matrix.entry.gemfile }}.gemfile + BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile runs-on: ubuntu-latest continue-on-error: false strategy: + max-parallel: 4 matrix: - entry: - - { ruby: "2.6", gemfile: 'mongoid_3', mongodb: "3.6" } - - { ruby: "2.6", gemfile: 'mongoid_4', mongodb: "3.6" } - - { ruby: "2.6", gemfile: 'mongoid_4', mongodb: "3.6" } - - { ruby: "2.6", gemfile: 'mongoid_5', mongodb: "3.6" } - - { ruby: "2.6", gemfile: 'mongoid_5', mongodb: "3.6" } - - { ruby: "2.6", gemfile: 'mongoid_6', mongodb: "3.6" } - - { ruby: "2.6", gemfile: 'mongoid_6', mongodb: "3.6" } - - { ruby: "2.6", gemfile: 'mongoid_6', mongodb: "3.6" } - - { ruby: "2.6", gemfile: 'mongoid_7', mongodb: "3.6" } - - { ruby: "2.6", gemfile: 'mongoid_7', mongodb: "3.6" } - - { ruby: "2.7", gemfile: 'mongoid_7', mongodb: "3.6" } - - { ruby: "3.0", gemfile: 'mongoid_8', mongodb: "3.6" } - - { ruby: "3.1", gemfile: 'mongoid_8', mongodb: "3.6" } - - { ruby: "2.6", gemfile: 'mongoid_6', mongodb: "4.0" } - - { ruby: "2.6", gemfile: 'mongoid_7', mongodb: "4.0" } - - { ruby: "2.6", gemfile: 'mongoid_7', mongodb: "4.0" } - - { ruby: "2.7", gemfile: 'mongoid_7', mongodb: "4.0" } - - { ruby: "3.0", gemfile: 'mongoid_8', mongodb: "4.0" } - - { ruby: "3.1", gemfile: 'mongoid_8', mongodb: "4.0" } - - { ruby: "2.6", gemfile: 'mongoid_6', mongodb: "4.2" } - - { ruby: "2.6", gemfile: 'mongoid_7', mongodb: "4.2" } - - { ruby: "2.6", gemfile: 'mongoid_7', mongodb: "4.2" } - - { ruby: "2.7", gemfile: 'mongoid_7', mongodb: "4.2" } - - { ruby: "3.0", gemfile: 'mongoid_8', mongodb: "4.2" } - - { ruby: "3.1", gemfile: 'mongoid_8', mongodb: "4.2" } - - { ruby: "2.6", gemfile: 'mongoid_6', mongodb: "4.4" } - - { ruby: "2.6", gemfile: 'mongoid_7', mongodb: "4.4" } - - { ruby: "2.6", gemfile: 'mongoid_7', mongodb: "4.4" } - - { ruby: "2.7", gemfile: 'mongoid_7', mongodb: "4.4" } - - { ruby: "3.0", gemfile: 'mongoid_8', mongodb: "4.4" } - - { ruby: "3.1", gemfile: 'mongoid_8', mongodb: "4.4" } - - { ruby: "2.6", gemfile: 'mongoid_6', mongodb: "5.0" } - - { ruby: "2.6", gemfile: 'mongoid_7', mongodb: "5.0" } - - { ruby: "2.6", gemfile: 'mongoid_7', mongodb: "5.0" } - - { ruby: "2.7", gemfile: 'mongoid_7', mongodb: "5.0" } - - { ruby: "3.0", gemfile: 'mongoid_8', mongodb: "5.0" } - - { ruby: "3.1", gemfile: 'mongoid_8', mongodb: "5.0" } - - { ruby: "3.1", gemfile: 'mongoid_9', mongodb: "5.0" } - - { ruby: "2.6", gemfile: 'mongoid_6', mongodb: "6.0" } - - { ruby: "2.6", gemfile: 'mongoid_7', mongodb: "6.0" } - - { ruby: "2.6", gemfile: 'mongoid_7', mongodb: "6.0" } - - { ruby: "2.7", gemfile: 'mongoid_7', mongodb: "6.0" } - - { ruby: "3.0", gemfile: 'mongoid_8', mongodb: "6.0" } - - { ruby: "3.1", gemfile: 'mongoid_8', mongodb: "6.0" } - - { ruby: "3.1", gemfile: 'mongoid_9', mongodb: "6.0" } - - { ruby: "2.6", gemfile: 'mongoid_6', mongodb: "7.0" } - - { ruby: "2.6", gemfile: 'mongoid_7', mongodb: "7.0" } - - { ruby: "2.6", gemfile: 'mongoid_7', mongodb: "7.0" } - - { ruby: "2.7", gemfile: 'mongoid_7', mongodb: "7.0" } - - { ruby: "3.0", gemfile: 'mongoid_8', mongodb: "7.0" } - - { ruby: "3.1", gemfile: 'mongoid_8', mongodb: "7.0" } - - { ruby: "3.1", gemfile: 'mongoid_9', mongodb: "7.0" } + ruby: ["2.6", "2.7", "3.0", "3.1"] + gemfile: ["mongoid_3", "mongoid_4", "mongoid_5", "mongoid_6", "mongoid_7", "mongoid_8", "mongoid_9"] + mongodb: ["4.0", "5.0", "6.0", "7.0"] + exclude: + # Exclusion rules for incompatible versions ordered by ruby version, gemfile, and mongodb version + - { ruby: "2.6", gemfile: "mongoid_3" } + - { ruby: "2.6", gemfile: "mongoid_9" } + - { ruby: "2.6", gemfile: "mongoid_4", mongodb: "6.0" } + - { ruby: "2.6", gemfile: "mongoid_4", mongodb: "7.0" } + - { ruby: "2.6", gemfile: "mongoid_8", mongodb: "4.0" } + - { ruby: "2.6", gemfile: "mongoid_8", mongodb: "5.0" } + - { ruby: "2.6", gemfile: "mongoid_8", mongodb: "6.0" } + - { ruby: "2.7", gemfile: "mongoid_3" } + - { ruby: "2.7", gemfile: "mongoid_4" } + - { ruby: "2.7", gemfile: "mongoid_5" } + - { ruby: "3.0", gemfile: "mongoid_3" } + - { ruby: "3.0", gemfile: "mongoid_4" } + - { ruby: "3.0", gemfile: "mongoid_5" } + - { ruby: "3.0", gemfile: "mongoid_6" } + - { ruby: "3.1", gemfile: "mongoid_3" } + - { ruby: "3.1", gemfile: "mongoid_4" } + - { ruby: "3.1", gemfile: "mongoid_5" } + - { ruby: "3.1", gemfile: "mongoid_6" } steps: - - name: Set up MongoDB ${{ matrix.entry.mongodb }} + - name: Cache Gems + uses: actions/cache@v3 + with: + path: vendor/bundle + key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }} + restore-keys: | + ${{ runner.os }}-gem- + + - name: Set up MongoDB ${{ matrix.mongodb }} uses: supercharge/mongodb-github-action@1.8.0 with: - mongodb-version: ${{ matrix.entry.mongodb }} + mongodb-version: ${{ matrix.mongodb }} + - uses: actions/checkout@v3 + - name: Set up Ruby uses: ruby/setup-ruby@v1 with: - ruby-version: ${{ matrix.entry.ruby }} + ruby-version: ${{ matrix.ruby }} bundler: '2' bundler-cache: true + + - name: Install dependencies + run: bundle install + - name: Run tests run: bundle exec rake \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 5853e64..853e201 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ ### 1.1.0 (Next) +* [#19](https://github.com/mongoid/mongoid-compatibility/pull/19): Run unit tests using matrix - [@saisrinivasan](https://github.com/SairamSrinivasan). * Your contribution here. ### 1.0.0 (2024/06/19) diff --git a/gemfiles/mongoid_head.gemfile b/gemfiles/mongoid_head.gemfile deleted file mode 100644 index 1879836..0000000 --- a/gemfiles/mongoid_head.gemfile +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -# This file was generated by Appraisal - -source 'http://rubygems.org' - -gem 'mongoid', github: 'mongodb/mongoid' - -group :development do - gem 'appraisal', '~> 2.0' - gem 'rake', '< 12' - gem 'rubocop', '0.33.0' -end - -group :test do - gem 'rspec' -end - -gemspec path: '../'