From 04c326a4fe9aec6ab4be570857672a090cd10d07 Mon Sep 17 00:00:00 2001 From: Weston Ganger Date: Mon, 16 Oct 2023 18:17:31 -0700 Subject: [PATCH] Refractor CI, Add Rails 7.1 to CI --- .github/workflows/test.yml | 216 +++++++++++-------------------------- Gemfile | 24 ++--- active_snapshot.gemspec | 3 - 3 files changed, 71 insertions(+), 172 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 583314c..c0adfa7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,210 +1,122 @@ name: Tests - on: push: - branches: - - master + branches: ['master'] pull_request: - branches: - - '*' jobs: - test_sqlite: - runs-on: ubuntu-20.04 + test: + runs-on: ubuntu-latest + + env: + RAILS_ENV: test + strategy: fail-fast: false matrix: include: - ### TEST ALL RUBY VERSIONS, USE DEFAULT GEMFILE - - ruby: 2.3 - - ruby: 2.4 - - ruby: 2.5 - - ruby: 2.6 - - ruby: 2.7 - - ruby: "3.0" ### must be quoted otherwise will be treated as "3" which will resolve to latest 3.x version - - ruby: 3.1 - - ruby: 3.2 - - ### RAILS VERSION TESTING - - ruby: 2.6 - env: - RAILS_VERSION: "5.0" - - ruby: 2.6 - env: - RAILS_VERSION: "5.1" - - ruby: 2.6 + ### TEST RUBY VERSIONS + - ruby: "2.5" + - ruby: "2.6" + - ruby: "2.7" + - ruby: "3.0" + - ruby: "3.1" + - ruby: "3.2" + ### TEST RAILS VERSIONS + - ruby: "2.6" env: RAILS_VERSION: "5.2" - - ruby: 2.6 + - ruby: "2.6" env: RAILS_VERSION: "6.0" - - ruby: 2.6 + - ruby: "2.6" env: RAILS_VERSION: "6.1" - - ruby: "3.1" + - ruby: "3.2" env: RAILS_VERSION: "7.0" - + - ruby: "3.2" + env: + RAILS_VERSION: "7.1" ### STORAGE METHOD TESTING - ruby: 3.2 + db_gem: "sqlite3" env: ACTIVE_SNAPSHOT_STORAGE_METHOD: "serialized_json" - ruby: 3.2 + db_gem: "sqlite3" env: ACTIVE_SNAPSHOT_STORAGE_METHOD: "serialized_yaml" - ruby: 3.2 + db_gem: "sqlite3" env: ACTIVE_SNAPSHOT_STORAGE_METHOD: "native_json" - - env: - BUNDLE_GEMFILE: "${{ matrix.gemfile }}" - DB_GEM: "sqlite3" - - steps: - - uses: actions/checkout@v3 - - - name: Install ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: "${{ matrix.ruby }}" - bundler-cache: true - - - name: Run tests - run: | - bundle exec rake - - - test_mysql: - runs-on: ubuntu-20.04 - services: - mysql: - image: mariadb - env: - MYSQL_ROOT_PASSWORD: password - MYSQL_DATABASE: test - options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 - ports: ['3306:3306'] - - strategy: - fail-fast: false - matrix: - include: - ### RAILS VERSION TESTING - ### DONT WORRY ABOUT TESTING ALL RUBY VERSIONS. THIS IS COVERED IN THE SQLITE3 TESTS - - ruby: 2.6 - env: - RAILS_VERSION: "5.0" - - ruby: 2.6 - env: - RAILS_VERSION: "5.1" - - ruby: 2.6 - env: - RAILS_VERSION: "5.2" - - ruby: 2.6 + - ruby: 3.2 + db_gem: "mysql2" env: - RAILS_VERSION: "6.0" - - ruby: 2.6 + ACTIVE_SNAPSHOT_STORAGE_METHOD: "serialized_json" + - ruby: 3.2 + db_gem: "mysql2" env: - RAILS_VERSION: "6.1" - - ruby: "3.1" + ACTIVE_SNAPSHOT_STORAGE_METHOD: "serialized_yaml" + - ruby: 3.2 + db_gem: "mysql2" env: - RAILS_VERSION: "7.0" - - ### STORAGE METHOD TESTING + ACTIVE_SNAPSHOT_STORAGE_METHOD: "native_json" - ruby: 3.2 + db_gem: "pg" env: ACTIVE_SNAPSHOT_STORAGE_METHOD: "serialized_json" - ruby: 3.2 + db_gem: "pg" env: ACTIVE_SNAPSHOT_STORAGE_METHOD: "serialized_yaml" - ruby: 3.2 + db_gem: "pg" env: ACTIVE_SNAPSHOT_STORAGE_METHOD: "native_json" - env: - BUNDLE_GEMFILE: "${{ matrix.gemfile }}" - DB_GEM: "mysql2" - - steps: - - uses: actions/checkout@v3 - - - name: Install ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: "${{ matrix.ruby }}" - bundler-cache: true - - - name: Run tests - env: - DATABASE_URL: mysql2://root:password@127.0.0.1:3306/test - RAILS_ENV: test - run: | - bundle exec rake - - - test_pg: - runs-on: ubuntu-20.04 services: + mysql: + image: ${{ (matrix.db_gem == 'mysql2' && 'mysql') || '' }} # conditional service + env: + MYSQL_ROOT_PASSWORD: password + MYSQL_DATABASE: test + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + ports: ['3306:3306'] postgres: - image: postgres + image: ${{ (matrix.db_gem == 'pg' && 'postgres') || '' }} # conditional service env: POSTGRES_USER: postgres POSTGRES_PASSWORD: password POSTGRES_DB: test ports: ['5432:5432'] - strategy: - fail-fast: false - matrix: - include: - ### RAILS VERSION TESTING - ### DONT WORRY ABOUT TESTING ALL RUBY VERSIONS. THIS IS COVERED IN THE SQLITE3 TESTS - - ruby: 2.6 - env: - RAILS_VERSION: "5.0" - - ruby: 2.6 - env: - RAILS_VERSION: "5.1" - - ruby: 2.6 - env: - RAILS_VERSION: "5.2" - - ruby: 2.6 - env: - RAILS_VERSION: "6.0" - - ruby: 2.6 - env: - RAILS_VERSION: "6.1" - - ruby: "3.1" - env: - RAILS_VERSION: "7.0" - - ### STORAGE METHOD TESTING - - ruby: 3.2 - env: - ACTIVE_SNAPSHOT_STORAGE_METHOD: "serialized_json" - - ruby: 3.2 - env: - ACTIVE_SNAPSHOT_STORAGE_METHOD: "serialized_yaml" - - ruby: 3.2 - env: - ACTIVE_SNAPSHOT_STORAGE_METHOD: "native_json" - - env: - BUNDLE_GEMFILE: "${{ matrix.gemfile }}" - DB_GEM: "pg" - steps: - uses: actions/checkout@v3 + - name: Set env DATABASE_URL + run: | + if [[ "${{ matrix.db_gem }}" == 'mysql2' ]]; then + echo "DATABASE_URL=mysql2://root:password@127.0.0.1:3306/test" >> "$GITHUB_ENV" + elif [[ "${{ matrix.db_gem }}" == 'pg' ]]; then + echo "DATABASE_URL=postgres://postgres:password@localhost:5432/test" >> "$GITHUB_ENV" + fi + + - name: Set env DB_GEM + if: ${{ matrix.db_gem }} + run: | + echo "DB_GEM=${{ matrix.db_gem }}" >> "$GITHUB_ENV" + - name: Install ruby uses: ruby/setup-ruby@v1 with: ruby-version: "${{ matrix.ruby }}" - bundler-cache: true + bundler-cache: false ### not compatible with ENV-style Gemfile - - name: Run tests - env: - DATABASE_URL: postgres://postgres:password@localhost:5432/test - RAILS_ENV: test + - name: Run test run: | - bundle exec rake + bundle install + bundle exec rake db:create + bundle exec rake db:migrate + bundle exec rake test diff --git a/Gemfile b/Gemfile index 2b13722..740abbb 100644 --- a/Gemfile +++ b/Gemfile @@ -1,22 +1,12 @@ source "https://rubygems.org" -# Specify your gem's dependencies in active_snapshot.gemspec gemspec -ENV["DB_GEM"] ||= "sqlite3" - -if (RUBY_VERSION.to_f < 2.5 || false) ### set to true if locally testing old Rails version - #gem 'rails', '~> 5.0.7' - #gem 'rails', '~> 5.1.7' - gem 'rails', "~> 5.2.4" - if ENV['DB_GEM'] == 'sqlite3' - gem "sqlite3", '~> 1.3.6' - else - gem ENV["DB_GEM"] - end -else - #gem 'rails', '~> 6.0.3' - #gem 'rails', '~> 6.1.1' - gem 'rails', ENV["RAILS_VERSION"] - gem ENV['DB_GEM'] +def get_env(name) + (ENV[name] && !ENV[name].empty?) ? ENV[name] : nil end + +gem 'rails', get_env("RAILS_VERSION") + +db_gem = get_env("DB_GEM") || "sqlite3" +gem db_gem diff --git a/active_snapshot.gemspec b/active_snapshot.gemspec index dab7354..18fd7a2 100644 --- a/active_snapshot.gemspec +++ b/active_snapshot.gemspec @@ -17,8 +17,6 @@ Gem::Specification.new do |s| s.files = Dir.glob("{lib/**/*}") + %w{ LICENSE README.md Rakefile CHANGELOG.md } s.require_path = 'lib' - s.required_ruby_version = Gem::Requirement.new(">= 2.3.0") - s.add_runtime_dependency "activerecord" s.add_runtime_dependency "railties" s.add_runtime_dependency "activerecord-import" @@ -32,5 +30,4 @@ Gem::Specification.new do |s| if RUBY_VERSION.to_f >= 2.4 s.add_development_dependency "warning" end - end