Skip to content

Commit

Permalink
Optimize GitHub Actions workflows
Browse files Browse the repository at this point in the history
This commit splits the workflow into three parts: linting, MySQL, and
PostgreSQL. Additionally, database workflows test the most recent
version first, followed by all supported versions, followed by
unsupported versions.

Last but not least, several Rubocop issues were resolved, including
requiring MFA when publishing the gem.
  • Loading branch information
gregnavis committed Oct 20, 2023
1 parent 7c13cbd commit d322a6e
Show file tree
Hide file tree
Showing 13 changed files with 381 additions and 219 deletions.
20 changes: 20 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: Lint
on: [push, pull_request]

jobs:
# Run the linter first for rapid feedback if some trivial stylistic issues
# slipped through the cracks.
lint:
runs-on: ubuntu-latest
env:
# When running in CI the gemspec does NOT pull rubocop as a dependency
# to avoid conflicting with various Ruby/Rails setups. We need to
# set LINT to explicitly request rubocop as a dependency.
LINT: true
steps:
- uses: actions/checkout@v3
- uses: ruby/setup-ruby@v1
with:
ruby-version: 3.0
bundler-cache: true
- run: bundle exec rake rubocop
149 changes: 149 additions & 0 deletions .github/workflows/mysql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
name: Test MySQL
on: [push, pull_request]

jobs:
test-latest:
name: "Active Record 7.1 + Ruby 3.2"
runs-on: ubuntu-latest
services:
mysql:
image: mysql
env:
MYSQL_ROOT_PASSWORD: github
MYSQL_USER: github
MYSQL_PASSWORD: github
MYSQL_DATABASE: active_record_doctor_primary
options: >-
--health-cmd "mysqladmin ping -h 127.0.0.1"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 3306:3306
env:
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/Gemfile.activerecord-7.1.x
steps:
- uses: actions/checkout@v3
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.2"
bundler-cache: true
- name: Prepare the database
run: |
mysqladmin -h127.0.0.1 -uroot -pgithub create active_record_doctor_secondary
mysql -h127.0.0.1 -uroot -pgithub -e "GRANT ALL PRIVILEGES ON active_record_doctor_secondary.* TO 'github'"
- name: Run the test suite against MySQL
run: bundle exec rake test:mysql2
env:
# We can't use localhost because that makes the MySQL client try
# connecting via a Unix socket instead of TCP.
DATABASE_HOST: 127.0.0.1
DATABASE_PORT: 3306
DATABASE_USERNAME: github
DATABASE_PASSWORD: github

test-supported:
name: "Active Record ${{ matrix.active_record }} + Ruby ${{ matrix.ruby }}"
needs: [test-latest]
runs-on: ubuntu-latest
services:
mysql:
image: mysql
env:
MYSQL_ROOT_PASSWORD: github
MYSQL_USER: github
MYSQL_PASSWORD: github
MYSQL_DATABASE: active_record_doctor_primary
options: >-
--health-cmd "mysqladmin ping -h 127.0.0.1"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 3306:3306
strategy:
matrix:
ruby: ["3.0", "3.1", "3.2"]
active_record: ["6.1", "7.0", "7.1"]
exclude:
- ruby: "3.2"
active_record: "7.1"
env:
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/Gemfile.activerecord-${{ matrix.active_record }}.x
steps:
- uses: actions/checkout@v3
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
bundler-cache: true
- name: Prepare the database
run: |
mysqladmin -h127.0.0.1 -uroot -pgithub create active_record_doctor_secondary
mysql -h127.0.0.1 -uroot -pgithub -e "GRANT ALL PRIVILEGES ON active_record_doctor_secondary.* TO 'github'"
- name: Run the test suite against MySQL
run: bundle exec rake test:mysql2
env:
# We can't use localhost because that makes the MySQL client try
# connecting via a Unix socket instead of TCP.
DATABASE_HOST: 127.0.0.1
DATABASE_PORT: 3306
DATABASE_USERNAME: github
DATABASE_PASSWORD: github

test-unsupported:
name: "Active Record ${{ matrix.active_record }} + Ruby ${{ matrix.ruby }}"
needs: [test-supported]
runs-on: ubuntu-latest
services:
mysql:
image: mysql
env:
MYSQL_ROOT_PASSWORD: github
MYSQL_USER: github
MYSQL_PASSWORD: github
MYSQL_DATABASE: active_record_doctor_primary
options: >-
--health-cmd "mysqladmin ping -h 127.0.0.1"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 3306:3306
strategy:
matrix:
ruby: ["2.4", "2.5", "2.6", "2.7"]
active_record: ["4.2", "5.0", "5.1", "5.2", "6.0"]
exclude:
- ruby: "2.7"
active_record: "4.2"
- ruby: "2.4"
active_record: "6.0"
include:
- ruby: "3.0"
active_record: "6.0"
- ruby: "3.1"
active_record: "6.0"
- ruby: "3.2"
active_record: "6.0"
env:
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/Gemfile.activerecord-${{ matrix.active_record }}.x
steps:
- uses: actions/checkout@v3
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
rubygems: ${{ (matrix.ruby == '2.4' || matrix.ruby == '2.5' || matrix.ruby == '2.6') && '3.2.3' || '' }}
bundler-cache: true
- name: Prepare the database
run: |
mysqladmin -h127.0.0.1 -uroot -pgithub create active_record_doctor_secondary
mysql -h127.0.0.1 -uroot -pgithub -e "GRANT ALL PRIVILEGES ON active_record_doctor_secondary.* TO 'github'"
- name: Run the test suite against MySQL
run: bundle exec rake test:mysql2
env:
# We can't use localhost because that makes the MySQL client try
# connecting via a Unix socket instead of TCP.
DATABASE_HOST: 127.0.0.1
DATABASE_PORT: 3306
DATABASE_USERNAME: github
DATABASE_PASSWORD: github
154 changes: 154 additions & 0 deletions .github/workflows/postgresql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
name: Test PostgreSQL
on: [push, pull_request]

jobs:
test-latest:
name: "Active Record 7.1 + Ruby 3.2"
runs-on: ubuntu-latest
services:
postgres:
image: postgres
env:
POSTGRES_DB: active_record_doctor_primary
POSTGRES_USER: github
POSTGRES_PASSWORD: github
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
env:
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/Gemfile.activerecord-7.1.x
steps:
- uses: actions/checkout@v3
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.2"
bundler-cache: true
- name: Prepare PostgreSQL
run: createdb active_record_doctor_secondary
env:
PGHOST: localhost
PGPORT: 5432
PGUSER: github
PGPASSWORD: github
PGDATABASE: postgres
- name: Run the test suite against PostgreSQL
run: bundle exec rake test:postgresql
env:
DATABASE_HOST: localhost
DATABASE_PORT: 5432
DATABASE_USERNAME: github
DATABASE_PASSWORD: github

test-supported:
name: "Active Record ${{ matrix.active_record }} + Ruby ${{ matrix.ruby }}"
needs: [test-latest]
runs-on: ubuntu-latest
services:
postgres:
image: postgres
env:
POSTGRES_DB: active_record_doctor_primary
POSTGRES_USER: github
POSTGRES_PASSWORD: github
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
strategy:
matrix:
ruby: ["3.0", "3.1", "3.2"]
active_record: ["6.1", "7.0", "7.1"]
exclude:
- ruby: "3.2"
active_record: "7.1"
env:
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/Gemfile.activerecord-${{ matrix.active_record }}.x
steps:
- uses: actions/checkout@v3
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
rubygems: ${{ matrix.rubygems }}
bundler-cache: true
- name: Prepare PostgreSQL
run: createdb active_record_doctor_secondary
env:
PGHOST: localhost
PGPORT: 5432
PGUSER: github
PGPASSWORD: github
PGDATABASE: postgres
- name: Run the test suite against PostgreSQL
run: bundle exec rake test:postgresql
env:
DATABASE_HOST: localhost
DATABASE_PORT: 5432
DATABASE_USERNAME: github
DATABASE_PASSWORD: github

test-unsupported:
name: "Active Record ${{ matrix.active_record }} + Ruby ${{ matrix.ruby }}"
needs: [test-supported]
runs-on: ubuntu-latest
services:
postgres:
image: postgres
env:
POSTGRES_DB: active_record_doctor_primary
POSTGRES_USER: github
POSTGRES_PASSWORD: github
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
strategy:
matrix:
ruby: ["2.4", "2.5", "2.6", "2.7"]
active_record: ["4.2", "5.0", "5.1", "5.2", "6.0"]
exclude:
- ruby: "2.7"
active_record: "4.2"
- ruby: "2.4"
active_record: "6.0"
include:
- ruby: "3.0"
active_record: "6.0"
- ruby: "3.1"
active_record: "6.0"
- ruby: "3.2"
active_record: "6.0"
env:
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/Gemfile.activerecord-${{ matrix.active_record }}.x
steps:
- uses: actions/checkout@v3
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
rubygems: ${{ (matrix.ruby == '2.4' || matrix.ruby == '2.5' || matrix.ruby == '2.6') && '3.2.3' || '' }}
bundler-cache: true
- name: Prepare PostgreSQL
if: startsWith(matrix.active_record, '6.') || startsWith(matrix.active_record, '7.')
run: createdb active_record_doctor_secondary
env:
PGHOST: localhost
PGPORT: 5432
PGUSER: github
PGPASSWORD: github
PGDATABASE: postgres
- name: Run the test suite against PostgreSQL
run: bundle exec rake test:postgresql
env:
DATABASE_HOST: localhost
DATABASE_PORT: 5432
DATABASE_USERNAME: github
DATABASE_PASSWORD: github
Loading

0 comments on commit d322a6e

Please sign in to comment.